Web客户端调用服务器,服务器调用第三方,所有异步?

时间:2013-09-12 14:46:05

标签: web-services architecture n-layer

我有一个使用n层方法构建的网站。我遇到的问题是我需要客户端调用应用程序层,其他层之一将调用世界某个地方的另一个Web服务。另一个Web服务可能需要一些时间才能回来,所以我想做的事情,如果可能的话,使用异步请求的下面的内容: simple diagram of the async requests

客户端是HTML& JavaScript,服务器层是用C#(.NET 4.5)编写的,第三方Web服务只是我需要使用的Web服务

你会怎么写这个? 任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

服务器端代码需要看起来不像是异步调用外部服务。我没有看到这样做的优势。

当然,客户端代码将异步调用服务器端代码。 (一个AJAX请求,例如使用jQuery。)在处理该响应之前,它将以异步方式等待响应表单。但由于此请求中的服务器端代码为该一个请求提供服务,因此可以同步执行此操作。

实际上,如果服务器端代码本身也是异步的,那么它会在它有任何有用的代码之前将控制权返回给客户端代码。这意味着客户端异步处理程序无法执行任何操作。相反,当服务器端代码从外部服务获得响应时,它需要推送对客户端代码的响应。这可能与websockets等等有关,但可能比这种情况要复杂得多。

只有链中的第一个链接需要异步才能提供异步性的用户体验,系统的其余部分不需要。

答案 1 :(得分:0)

每当您拥有“客户端/服务器”边界时,您可以选择使服务器异步,也可以选择使客户端异步。这些决定是独立的。

我会假设您的第三方网络服务是可扩展的,,除了这一个请求之外,您的服务器还有其他事情要做。在这种情况下,我建议您的服务器是异步的。

异步编程在ASP.NET 4.5中与async / await一样自然。您可能希望使用HttpClientasync兼容的WCF或Web服务代理,具体取决于您的第三方服务。 ASP.NET MVC和WebAPI都支持您的服务的异步调用。

在客户端,你别无选择; 中的JavaScript必须是异步的。