<binding>
和<portType>
似乎都定义了一个操作及其消息。我不太明白,为什么它们都是必要的?
答案 0 :(得分:25)
portType (类似于Java接口)
<强>结合强>
SOAP Binding:
SOAP绑定允许document
or rpc
style与encoding
或literal
。 编码表示如何以XML格式编码数据值(这些规则指定&#34;某些内容&#34;是如何编码/序列化为XML然后再从XML解码/反序列化的to&#34;某事&#34;)。 Literal 表示数据是根据模式序列化的(这只是普通的XML数据)。运输类型为http,jms,smtp ......
HTTP GET & POST binding:
WSDL包括HTTP 1.1的GET和POST动词的绑定,以描述Web浏览器和网站之间的交互。
MIME binding: WSDL包含一种将抽象类型绑定到某种MIME格式的具体消息的方法。
在WSDL 2.0中:
有用的链接
答案 1 :(得分:24)
接口(wsdl:portType)
WSDL portType元素定义了一组操作(有时称为接口)。
操作元素包含输入和输出元素的组合。有输出元素时可能有一个fault元素。这些元素的顺序定义了消息交换模式(MEP)(单向,请求 - 响应等)
<强>的wsdl:结合强>
WSDL绑定元素描述了使用给定协议的特定portType的具体细节。
答案 2 :(得分:9)
PortType定义Web服务的抽象接口
从概念上讲,它就像一个Java接口,因为它定义了一个抽象类型和相关的方法
在WSDL中,绑定和服务元素的端口类型是实现,这些元素指示 Web服务实现用于的协议,编码方案等
即绑定指定具体实现细节,实质上将portType映射到一组协议(HTTP和SOAP)消息样式(Document / RPC)和编码(literal)
这种干扰现在是否明确?
答案 3 :(得分:4)
<强> 的portType 强>
单一Web服务 可以支持 数量的不同协议 。数据结构取决于用于调用Web服务的协议。因此,您需要一种从操作映射到 端点 的方法,从中可以访问它们。 portType 元素负责此映射。
您可以为此Web服务的每个协议放置portType定义。例如,您可以使用 SOAP,HTTP-POST和HTTP-GET 来使用各个portType定义。操作名称是Web服务提供的方法。
<强> 结合 强>
您可以定义最终用户如何绑定到可获取操作的端口。您可以使用该元素执行此操作。
答案 4 :(得分:0)
wsdl:portType与wsdl:operation一起使用 即我们处于消息领域和xml本身
但是wsdl:binding与soap:binding和soap:operation一起使用 即我们处于编码,地址,标题和rpc领域
e.g。来自:http://www.w3.org/TR/wsdl#_soap-b
<binding name="StockQuoteSoap" type="tns:StockQuotePortType">
<soap:binding style="document" transport="http://example.com/smtp"/>
<operation name="SubscribeToQuotes">
<input message="tns:SubscribeToQuotes">
<soap:body parts="body" use="literal"/>
<soap:header message="tns:SubscribeToQuotes" part="subscribeheader" use="literal"/>
.....
<binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetTradePrice">
<soap:operation soapAction="http://example.com/GetTradePrice"/>
<input>
<soap:body use="encoded" namespace="http://example.com/stockquote"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
...
以及第3.2段中有关较低级别沟通内容的所有可能详细信息:
SOAP Binding使用以下扩展元素扩展WSDL:
<definitions .... >
<binding .... >
<soap:binding style="rpc|document" transport="uri">
<operation .... >
<soap:operation soapAction="uri"? style="rpc|document"?>?
<input>
<soap:body parts="nmtokens"? use="literal|encoded"
encodingStyle="uri-list"? namespace="uri"?>
<soap:header message="qname" part="nmtoken" use="literal|encoded"
encodingStyle="uri-list"? namespace="uri"?>*
<soap:headerfault message="qname" part="nmtoken" use="literal|encoded"
encodingStyle="uri-list"? namespace="uri"?/>*
<soap:header>
</input>
<output>
<soap:body parts="nmtokens"? use="literal|encoded"
encodingStyle="uri-list"? namespace="uri"?>
<soap:header message="qname" part="nmtoken" use="literal|encoded"
encodingStyle="uri-list"? namespace="uri"?>*
<soap:headerfault message="qname" part="nmtoken" use="literal|encoded"
encodingStyle="uri-list"? namespace="uri"?/>*
<soap:header>
</output>
<fault>*
<soap:fault name="nmtoken" use="literal|encoded"
encodingStyle="uri-list"? namespace="uri"?>
</fault>
</operation>
</binding>
<port .... >
<soap:address location="uri"/>
</port>
</definitions>