Web Service描述语言 WSDL 详解(3)

Namespace

  <definitions>和子节点<schema>都是namespace属性:

<definitions name="FooSample"
 targetNamespace="http://tempuri.org/wsdl/"
 xmlns:wsdlns="http://tempuri.org/wsdl/"
 xmlns:typens="http://tempuri.org/xsd"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
 xmlns:stk="http://schemas.microsoft.com/soap-toolkit/wsdl-extension"
 xmlns="http://schemas.xmlsoap.org/wsdl/">

<types>
 <schema targetNamespace="http://tempuri.org/xsd"
  xmlns="http://www.w3.org/2001/XMLSchema"
  xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
  elementFormDefault="qualified" >
 </schema>
</types>

  每个namespace属性都声明了一个缩略语,用在文档中。例如"xmlns:xsd"就为 http://www.w3.org/2001/XMLSchema定义了一个缩略语(xsd)。这就允许对该namespace的引用只需简单的在名字前加上前缀就可以了,如:"xsd:int"中的"xsd"就是合法的类型名。普通范围规则可运用于缩略前缀。也就是说,前缀所定义的元素只在元素中有效。

  Namespace派什么用?namespace的作用是要避免命名冲突。如果我建立一项Web Service,其中的WSDL文件包含一个名为"foo"的元素,而你想要使用我的服务与另一项服务连接作为补充,这样的话另一项服务的WSDL文件就不能包含名为"foo"的元素。两个服务器程序只有在它们在两个事例中表示完全相同的东西时,才可以取相同的名字。如果有了表示区别的namespace,我的网络服务里的"foo"就可以表示完全不同于另一个网络服务里"foo"的含义。在你的客户端里,你只要加以限制就可以引用我的"foo"。

  见下例:http://www.infotects.com/fooService#foo 就是完全限制的名字,相当于"carlos:foo",如果我声明了carlos作为http://www.infotects.com/fooService的快捷方式。请注意namespace中的URL是用来确定它们的唯一性的,同时也便于定位。URL所指向的地方不必是实际存在的网络地址,也可以使用GUID来代替或补充URL。例如,GUID"335DB901-D44A-11D4-A96E-0080AD76435D"就是一个合法的namespace指派。

  targetNamespace属性声明了一个namespace,元素中所有的声明的名字都列于其内。在WSDL示例中,<definitions>的targetNamespace 是http://tempuri.org/wsdl。这意味着所有在WSDL文档中声明的名字都属于这个namespace。<schema>元素有自己的targetNamespace属性,其值为 http://tempuri.org/xsd ,在<schma>元素中定义的所有名字都属于这个namespace而不是main的target namespace。

  <schema>元素的以下这行声明了默认的namespace。Schema中所有有效的名字都属于这个namespace。

xmlns=http://www.w3.org/2001/XMLSchema

SOAP消息

  对于使用WSDL的客户机和服务机来说,研究WSDL文件的一种方法就是决定什么来接受所发送的信息。尽管SOAP使用底层协议,如IP和HTTP等,但应用程序决定了服务器与客户机之间交互的高级协议。也就是说,进行一项操作,比如"echoint"把输入的整数送回,参数的数目、每个参数的类型、以及参数如何传送等因素决定了应用程序特定的协议。有很多方法可以确定此类协议,但我相信最好的方法就是使用WSDL。如果我们用这种视角来看待它,WSDL不只是一种接口协议,而且是一种协议特定的语言。它就是我们超越"固定"协议(IP、HTTP等)所需要的应用程序特定协议。

  WSDL可以确定SOAP消息是否遵从RPC或文档风格。RPC风格的消息(就是示例中所用的)看起来像是函数调用。而文档风格的消息则更普通,嵌套层次更小。下面的XML消息就是示例WSDL文件解析后的发送/接受效果,解析使用的是MS SOAP Toolkit 2.0(MSTK2)中的SoapClient对象。

  从客户端调用"foo(5131953)"函数:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <SOAP-ENV:Envelope
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
 <SOAP-ENV:Body>
  <m:foo xmlns:m="http://tempuri.org/message/">
   <arg>5131953</arg>
  </m:foo>
 </SOAP-ENV:Body>
  </SOAP-ENV:Envelope>
 从服务器接受的信息:
  <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<SOAP-ENV:Envelope
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAPSDK1:fooResponse xmlns:SOAPSDK1="http://tempuri.org/message/">
<result>5131953</result>
</SOAPSDK1:fooResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>


  两函数都调用了消息,其回应是有效的XML。SOAP消息由几部分组成,首先是<Envelop>元素,包含一个可选的<Header>元素以及至少一个<body>元素。Rpc函数所调用的消息体有一个根据操作"foo"命名的元素,而回应信息体有一个"fooResponse"元素。Foo元素有一个部分<arg>,就和WSDL中描述的一样,是单参数的。fooResponse也相应的有一个<result>的部分。注意encodingStyle、envelope和message的namespace和WSDL Bindings栏中的预定义的一致,重复如下:

<binding name="SimpleBinding" type="wsdlns:SimplePortType">
<stk:binding preferredEncoding="UTF-8" />
<soap:binding style="rpc"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="foo">
<soap:operation
soapAction="http://tempuri.org/action/Simple.foo"/>
<input>
<soap:body use="encoded"
namespace="http://tempuri.org/message/"
encodingStyle=
"http://schemas.xmlsoap.org/soap/encoding/" />
</input>
<output>
<soap:body use="encoded"
namespace="http://tempuri.org/message/"
encodingStyle=
"http://schemas.xmlsoap.org/soap/encoding/" />
</output>
</operation>
</binding>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: WSDL (Web Services Description Language) 是一种用于描述 Web 服务的语言。它使用 XML 格式来描述 Web 服务和如何访问它们。 Web 服务体系结构中的 WSDL 实现可以提供以下信息: - 服务所在的位置 (URL) - 服务所提供的功能 (例如,查询数据库、检查天气预报等) - 调用服务所需的输入参数 - 服务返回的输出结果 通常,WSDL 文件会包含一个描述 Web 服务的接口的 XML 文档,以及如何访问该接口的详细信息。有了 WSDL 文件,客户端程序就可以使用特定的工具生成代码来调用 Web 服务。 ### 回答2: Web服务体系结构是一种基于网络的架构,它允许不同平台和应用程序之间进行通信和交互。其中,WSDLWeb Services Description Language)是一种用于描述Web服务的XML格式语言WSDL可以被用来描述一个Web服务的功能、输入输出等细节。一般来说,一个简单的Web服务体系结构的WSDL实现会包含以下几个部分: 1. 服务接口(Service Interface):描述Web服务可提供的功能和操作,包括输入参数、输出参数和返回类型等。例如,一个简单的Web服务可能提供一个计算两个数相加的功能。 2. 绑定(Binding):将服务接口与具体的协议和传输机制绑定在一起。例如,绑定可以指定该Web服务使用SOAP协议进行通信,并通过HTTP协议进行传输。 3. 服务地址(Service Address):指定Web服务的网络地址,客户端可以通过该地址访问并调用服务。例如,一个Web服务的地址可以是一个URL(Uniform Resource Locator)。 4. 数据类型(Data Types):定义服务接口中所使用的数据类型。例如,对于前述计算两个数相加的功能,可能需要定义整数类型作为输入参数和返回值的数据类型。 通过这些部分的描述,WSDL实现可以为Web服务提供者和消费者提供一个统一的规范和约定,使得它们之间能够理解和相互协作。同时,WSDL实现还可以被用来生成客户端代码,使得客户端可以轻松地调用Web服务。 总而言之,WSDL实现是描述Web服务体系结构的一种XML格式语言,它定义了服务接口、绑定、服务地址和数据类型等方面的细节。通过WSDL实现,Web服务的提供者和消费者可以共同遵守一套标准和约定,实现不同平台和应用程序之间的互操作性。 ### 回答3: Web服务描述语言(WSDL)是一种用于描述和定义Web服务体系结构的XML语言。它允许开发人员描述一个Web服务的接口、访问地址、操作和消息格式等细节。以下是一个简单的描述Web服务体系结构的WSDL实现: ``` <?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions name="MyWebService" targetNamespace="http://www.example.com/webservice" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.example.com/webservice" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <wsdl:types> <xsd:schema targetNamespace="http://www.example.com/webservice"> <xsd:element name="GetEmployeeRequest"> <xsd:complexType> <xsd:sequence> <xsd:element name="EmployeeID" type="xsd:int"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="GetEmployeeResponse"> <xsd:complexType> <xsd:sequence> <xsd:element name="EmployeeName" type="xsd:string"/> <xsd:element name="EmployeeEmail" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> </wsdl:types> <wsdl:message name="GetEmployeeRequestMessage"> <wsdl:part name="parameters" element="tns:GetEmployeeRequest"/> </wsdl:message> <wsdl:message name="GetEmployeeResponseMessage"> <wsdl:part name="parameters" element="tns:GetEmployeeResponse"/> </wsdl:message> <wsdl:portType name="MyWebServicePortType"> <wsdl:operation name="GetEmployee"> <wsdl:input message="tns:GetEmployeeRequestMessage"/> <wsdl:output message="tns:GetEmployeeResponseMessage"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="MyWebServiceSoapBinding" type="tns:MyWebServicePortType"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/> <wsdl:operation name="GetEmployee"> <soap:operation soapAction="http://www.example.com/webservice/GetEmployee" style="rpc"/> <wsdl:input> <soap:body use="literal" namespace="http://www.example.com/webservice"/> </wsdl:input> <wsdl:output> <soap:body use="literal" namespace="http://www.example.com/webservice"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="MyWebService"> <wsdl:port name="MyWebServicePort" binding="tns:MyWebServiceSoapBinding"> <soap:address location="http://www.example.com/webservice"/> </wsdl:port> </wsdl:service> </wsdl:definitions> ``` 在上述WSDL实现中,我们定义了一个名为"MyWebService"的Web服务,它包含一个名为"GetEmployee"的操作。该操作接收一个名为"EmployeeID"的整数输入参数,并返回一个包含"EmployeeName"和"EmployeeEmail"的响应。WSDL还定义了消息、端口类型、绑定和服务等相关细节。 这段WSDL实现描述了Web服务的接口、访问地址和操作等信息,使得服务的使用者能够了解如何与该服务进行交互,并正确构造请求和解析响应。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

abedon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值