我正在WCF 4.6.1中编写API。客户端不会由我编写,也不一定是.NET(可以是任何语言/平台)。
有一种Web方法可以做很长时间的事情,所以我想鼓励客户端异步调用它。我知道客户端可以编写为将web方法视为异步(线程等),但有没有办法将实际的Web服务“强制”为异步操作?即WSDL是否有办法说“这是一种异步方法”?
答案 0 :(得分:1)
WSDL是否有办法说“这是一种异步方法”?
不,不。即使客户端线程在该呼叫发生时没有阻塞,客户端和服务之间的通信也是同步的。这就是说,调用是异步的,而不是Web服务方法是异步的。
如果您提供良好的文档说明对于特定操作,建议使用单独的线程,因为响应生成缓慢您应该没问题。需要构建客户端并测试与Web服务的集成。开发人员会注意到响应缓慢,他们将决定是否需要以非阻塞方式进行呼叫。甚至阻止可能是他们的解决方案,你永远不会知道,你认为慢的其他可能没有问题。
如果你想“强制”客户端不阻止你可以使用的响应,例如WS-Addressing(我假设你在这里使用WCF用于SOAP Web服务),你的客户端提供了一个回调端点,您可以在响应准备就绪时调用。这使客户端变得复杂,因为它现在需要具有接收端点。但是客户端开发人员可能更愿意选择她调用服务的方式(以阻塞/非阻塞方式),而不是必须实现WS-Addressing规范。