【发布时间】:2010-09-11 15:09:13
【问题描述】:
出于各种原因(例如减少客户端延迟),我们的网络服务分布在不同的服务器上,而且它们并不总是最新的。当一个方法不存在因为特定的Web服务太旧而不是抛出一个异常,如果我们可以让客户端在调用它之前检查服务是否响应给定的方法会更好,否则禁用该功能(或解决它)。
有没有办法做到这一点?
【问题讨论】:
标签: asp.net web-services soap
出于各种原因(例如减少客户端延迟),我们的网络服务分布在不同的服务器上,而且它们并不总是最新的。当一个方法不存在因为特定的Web服务太旧而不是抛出一个异常,如果我们可以让客户端在调用它之前检查服务是否响应给定的方法会更好,否则禁用该功能(或解决它)。
有没有办法做到这一点?
【问题讨论】:
标签: asp.net web-services soap
获取 WSDL(将 ?wsdl 附加到 URL)- 你可以用任何你喜欢的方式解析它。
【讨论】:
对 Web 服务进行单元测试,以确保其签名不会被破坏。当您编写破坏方法签名的代码时,您会知道并可以相应地调整其他应用程序。
或者只是不要破坏 Web 服务,并以一种允许 syou 对其进行版本控制的方式发布它们。与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,或者只是尝试使用“方法”并检查响应中的错误(您不必向用户发送异常...)
另外,我不知道我是否理解你,但你正在考虑查询服务器两次,一次检查方法是否存在,第二次如果存在则进行实际调用?如果没有,我会检查错误,如果是,则正常进行。
【讨论】: