我一直在尝试找出使用WCF BasicHTTPBinding生成的WSDL中使用的SOAP 1.1 / 1.2版本。但我无法确定。
我需要确认这一点,以便告诉客户我们正在使用特定版本的SOAP。要求是使用SOAP 1.1。从我读到的BasicHttpBinding使用SOAP1.1但无法找到或检查。
请有人帮忙。 e.g。
<wsdl:definitions name="MyService" targetNamespace="http://mydomain.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:tns="http://spotless.com/isb/services" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
答案 0 :(得分:9)
在您的WSDL定义中,WCF包含SOAP 1.1的名称空间。和SOAP 1.2。 SOAP 1.1的命名空间具有前缀soap
。 SOAP 1.1端点将仅使用此命名空间:
<wsdl:binding name="SomeBinding" type="...">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="GetTime">
<soap:operation soapAction="..." style="..." />
<wsdl:input name="...">
<soap:body use="..." />
</wsdl:input>
<wsdl:output name="...">
<soap:body use="..." />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="...">
<wsdl:port name="..." binding="tns:SomeBinding">
<soap:address location="..." />
</wsdl:port>
</wsdl:port>
您是否看到所有这些元素都以soap
为前缀?这意味着SOAP 1.1,因为{1}}前缀是为SOAP 1.1名称空间定义的。如果它使用soap
前缀,则意味着SOAP 1.2。
如果WCF服务有多个端点,它将具有多个soap12
元素,每个元素都可以引用自己的wsdl:port
规范,其中包含不同版本的SOAP和不同的策略(我在示例中跳过了策略引用)。
WCF中的BasicHttpBinding始终使用SOAP 1.1。