WSDL 有异步网络方法的概念吗?

Does WSDL have the concept of an asynchronous web method?

我正在 WCF 4.6.1 中编写 API。客户端不是我写的,也不一定是.NET(它们可以是任何language/platform)。

有一个 web 方法需要很长时间,所以我想鼓励客户端异步调用它。我知道可以编写客户端以将 Web 方法视为异步(线程等),但是有没有办法 "enforcing" 将实际的 Web 服务视为异步操作?即 WSDL 是否有办法说 "this is an async method"?

Does WSDL have a way to saying "this is an async method"?

不,不是。客户端和服务之间的通信是同步的,即使在调用发生时客户端线程没有阻塞也是如此。这是说调用是异步的,而不是 Web 服务方法是异步的。

如果您提供了很好的文档来说明对于特定操作,建议使用单独的线程,因为生成响应的速度很慢,您应该没问题。需要构建客户端并测试与 Web 服务的集成。开发人员会注意到响应缓慢,他们将决定是否需要以非阻塞方式进行调用。甚至阻塞也可能是他们的解决方案,你永远不知道,你认为慢的其他人可能没有问题。

如果您希望 "force" 客户端不阻止响应,您可以使用例如 WS-Addressing(我在这里假设您将 WCF 用于 SOAP Web 服务),您的客户端提供响应准备好时可以调用的回调端点。这使客户端有点复杂,因为它现在需要一个接收端点。但是客户端开发人员可能更愿意选择她调用服务的方式(以 blocking/non 阻塞方式),而不是必须实施 WS-Addressing 规范。