我正在实现基于SOAP的Web服务,并且WS-Addressing正在运行。但是,我无法看到如何让WSDL发布客户端应该使用的内容作为wsa:To元素的值。
我在WSDL中使用了下面的代码段,并使用SOAP-UI生成请求。看来SOAP-UI认识到wsa:action应设置为“http://myco.com/myOperation”,尽管它不会自动添加此标头。我必须选择“添加WS-A标题”菜单选项。
我的问题是它没有添加wsa:To标头。任何人都可以告诉我如何修改我的WSDL告诉客户wsa:To是必需的,它的值应该是“http://myco.com/cap/services/v1”?
由于
<wsdl:portType name="MyPortType">
<wsdl:operation name="MyOperation">
<wsdl:input message="tns:MyRequestMessage" name="Request"
wsaw:Action="http://myco.com/myOperation"/>
<wsdl:output message="tns:MyResponseMessage" name="Response"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="MyBinding" type="tns:MyPortType">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
<wsaw:UsingAddressing wsdl:required="true"/>
<wsdl:operation name="MyOperation">
<soap:operation soapAction="" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="MyService">
<wsdl:port binding="tns:MyBinding" name="MyPort">
<soap:address location="http://myco.com/services"/>
<wsa:Address>http://myco.com/cap/services/v1</wsa:Address>
</wsdl:port>
</wsdl:service>
答案 0 :(得分:1)
为实现这一目标,我为ws寻址2005版本
定义了名称空间<xs:schema ... xmlns:wsa5="http://www.w3.org/2005/08/addressing">
....
</xs:schema>
消息类型
<wsdl:message name="wsaHeader">
<wsdl:part name="MessageID" element="wsa5:MessageID" />
<wsdl:part name="RelatesTo" element="wsa5:RelatesTo" />
<wsdl:part name="From" element="wsa5:From" />
<wsdl:part name="ReplyTo" element="wsa5:ReplyTo" />
<wsdl:part name="FaultTo" element="wsa5:FaultTo" />
<wsdl:part name="To" element="wsa5:To" />
<wsdl:part name="Action" element="wsa5:Action" />
</wsdl:message>
然后在我的输入和输出中,我放置了以下标签。
<wsdl:input>
<soap:header use="literal" message="tns:wsaHeader" part="Action"/>
<soap:header use="literal" message="tns:wsaHeader" part="To"/>
<soap:header use="literal" message="tns:wsaHeader" part="FaultTo"/>
<soap:header use="literal" message="tns:wsaHeader" part="ReplyTo"/>
<soap:header use="literal" message="tns:wsaHeader" part="From"/>
<soap:header use="literal" message="tns:wsaHeader" part="RelatesTo"/>
<soap:header use="literal" message="tns:wsaHeader" part="MessageID"/>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:header use="literal" message="tns:wsaHeader" part="Action"/>
<soap:header use="literal" message="tns:wsaHeader" part="To"/>
<soap:header use="literal" message="tns:wsaHeader" part="FaultTo"/>
<soap:header use="literal" message="tns:wsaHeader" part="ReplyTo"/>
<soap:header use="literal" message="tns:wsaHeader" part="From"/>
<soap:header use="literal" message="tns:wsaHeader" part="RelatesTo"/>
<soap:header use="literal" message="tns:wsaHeader" part="MessageID"/>
<soap:body use="literal" />
</wsdl:output>
您可能只需为您的目的添加To
标记。