如何在ASP.NET中等待异步Web服务调用的结果以获得最佳性能

Pol*_*Pol 7 .net c# asp.net iis web-services

在WebForms ASP.NET站点(IIS,单个应用程序池)中,我调用了Visual Studio中引用的冗长Web服务方法作为服务引用(.NET 4.0).不幸的是,在向用户提供页面之前,我必须等待来自Web服务的信息.当前Web服务是同步调用的,因此服务器无法重用当前线程来处理对性能有影响的其他请求.

当然我可以在Visual Studio中为服务引用生成异步操作BeginGetFoo而不是调用GetFoo,但我仍然必须等待来自Web服务的结果.

这是个问题.如果我使用AsyncWaitHandle.WaitOne(如下所示),我今天使用的同步调用在整个应用程序性能方面是否会更好?

IAsyncResult result = fooSoapClient.BeginGetFoo();
result.AsyncWaitHandle.WaitOne();
var foo = fooSoapClient.EndGetFoo(result);
Run Code Online (Sandbox Code Playgroud)

当然,如果等待可以做得更好,我愿意接受建议.