由于各种原因(例如减少客户端的延迟),我们的 Web 服务分布在不同的服务器上,而且它们并不总是都是最新的。与其在由于特定的 Web 服务太旧而导致方法不存在时抛出异常,不如让客户端在调用它之前检查服务是否响应给定的方法,否则禁用该功能(或解决它)。
有没有办法做到这一点?
由于各种原因(例如减少客户端的延迟),我们的 Web 服务分布在不同的服务器上,而且它们并不总是都是最新的。与其在由于特定的 Web 服务太旧而导致方法不存在时抛出异常,不如让客户端在调用它之前检查服务是否响应给定的方法,否则禁用该功能(或解决它)。
有没有办法做到这一点?
获取 WSDL(将 ?wsdl 附加到 URL) - 您可以以任何您喜欢的方式对其进行解析。
对 Web 服务进行单元测试以确保其签名不会中断。当您编写破坏方法签名的代码时,您将知道并可以相应地调整其他应用程序。
或者只是不要破坏 Web 服务并以使您能够对其进行版本控制的方式发布它们。与http://services.domain.com/MyService/V1.1/Service.asmx(对于 .NET)一样,这样当您发布 v1.2 并进行重大更改时,使用 v1.1 的应用程序不会中断.
如果管理 Web 服务真的很麻烦,我也会检查使用内部 UDDI 服务器。使用 UDDI 的绿页将告诉您您想了解的有关该服务的信息。
当您发出 SOAP 请求时,您只是向服务器发送 HTTP 请求。如果服务器理解它,它将返回一个 HTTP 200 和一些 XML,否则它会向您发送一些错误 HTTP 代码(404、500、...)
没有一般的方法可以要求 Web 服务公开的“方法”是否存在。如果它是自动的,请尝试使用公开的 WSDL,或者只是尝试使用“方法”并检查响应中的错误(您不必向用户发送异常......)
另外,我不知道我是否理解你,但你正在考虑查询服务器两次,一次检查方法是否存在,第二次如果存在则进行实际调用?如果没有,我会检查错误,如果是,则正常进行。