我有一个使用 n 层方法构建的网站。我遇到的问题是我需要客户端调用应用程序层,然后其他层之一将调用世界某处的另一个 Web 服务。另一个 Web 服务可能需要一些时间才能恢复,所以如果可能的话,我想使用异步请求执行以下操作:
客户端是 HTML 和 JavaScript,服务器层是用 C# (.NET 4.5) 编写的,第 3 方 Web 服务只是我需要使用的 Web 服务
你会怎么写这个?任何帮助都感激不尽
我有一个使用 n 层方法构建的网站。我遇到的问题是我需要客户端调用应用程序层,然后其他层之一将调用世界某处的另一个 Web 服务。另一个 Web 服务可能需要一些时间才能恢复,所以如果可能的话,我想使用异步请求执行以下操作:
客户端是 HTML 和 JavaScript,服务器层是用 C# (.NET 4.5) 编写的,第 3 方 Web 服务只是我需要使用的 Web 服务
你会怎么写这个?任何帮助都感激不尽
只要您有“客户端/服务器”边界,您就可以选择使服务器异步以及使客户端异步。这些决定是独立的。
我会假设您的第三方 Web 服务是可扩展的,或者您的服务器除了这个请求之外还有其他事情要做。在这种情况下,我建议您的服务器是异步的。
在 ASP.NET 4.5 中使用async
/进行异步编程是很自然的。await
根据您的第三方服务,您可能希望使用兼容的 WCF 或 web 服务代理HttpClient
。async
ASP.NET MVC 和 WebAPI 都支持对您的服务进行异步调用。
在客户端,你别无选择;浏览器中的 JavaScript必须是异步的。
看起来服务器端代码不需要异步调用外部服务。我没有看到这样做的优势。
当然,客户端代码会异步调用服务器端代码。(一个 AJAX 请求,例如使用 jQuery。)它会在处理该响应之前以异步方式等待该服务的响应表单。但是由于这个请求中的服务器端代码只为那个请求提供服务,所以它可以同步进行。
事实上,如果服务器端代码本身也是异步的,那么它会在它有任何有用的东西之前立即将控制权返回给客户端代码。这意味着客户端异步处理程序不能做任何事情。相反,当服务器端代码从外部服务获得响应时,它需要将该响应推送到客户端代码。这对于 websockets 和诸如此类的东西是可能的,但可能比这种情况需要的复杂得多。
只有链中的第一个环节需要异步才能提供异步的用户体验,系统的其余部分不需要。