关于服务名称更改的 SOAP 客户端向后兼容性

Regarding SOAP clients backward compatibility for service name change

其中一家内部 Web 服务提供商提供 SOAP RPC API 以连接到他们的系统。最近他们更改了从他们的 wsdl 中反映出来的服务名称。

例如 如果该服务以前是 "MyService",它已更改为 "MyService1",但地址位置保持不变。

<wsdl:service name="MyService">
<wsdl:port binding="tns:MyServiceSoapBinding" name="APIImplPort">
<soap:address location="http://10.64.16.141:8080/cms/APIImpl"/>
</wsdl:port>
</wsdl:service>


<wsdl:service name="MyService1">
<wsdl:port binding="tns:MyService1SoapBinding" name="APIImplPort">
<soap:address location="http://10.64.16.141:8080/cms/APIImpl"/>
</wsdl:port>
</wsdl:service>

是否需要更改现有客户端,或者它们会在没有任何更改的情况下工作?

具体来说,我使用 java 和 spring JaxWsPortProxyFactoryBean 连接到上述 Web 服务。我可以看到我必须更改服务名称才能使其工作,但我不确定这是否是由于我必须更改服务名称才能使其工作的底层机制(spring JaxWsPortProxyFactoryBean)或其他原因可以与任何其他技术一起使用而无需任何更改(例如 .NET)。

简而言之,如果您在客户端使用服务名称(当您想在您的技术中使用某些框架将 SOAP 数据包发送到服务器时会发生这种情况),向后兼容性将不起作用。这是因为 SOAP xml 数据包不引用服务名称,它引用名称 space、操作等。 如果您直接发送 SOAP xml 数据包,服务名称更改不会对任何技术产生任何影响。

此外,在 .Net 技术实现中,它由技术本身处理,但在 java 中,它破坏了向后兼容性,因为我们必须使用大多数技术(框架)指定服务名称才能发送SOAP 数据包到服务器。其他技术也可能会向后兼容。

Java:当我没有更改服务名称时出现以下错误:- javax.xml.ws.WebServiceException:{xx/}MyService 不是有效服务。有效服务是:{xx/}MyService1

我认为这可能是由于我的 Java 技术的底层 spring 框架,但后来我尝试了非常原始的实现 (http://www.mkyong.com/webservices/jax-ws/jax-ws-hello-world-example/),我可以看到该服务必须指定名称才能将 SOAP 数据包发送到服务器。

.Net 应用程序在 .Net 中工作,没有任何服务名称更改(如果我不需要更改服务 MyService1 的更新操作)基于底层机制的假设处理来自引用的 wsdl 的服务更改。