2010-08-27 119 views
6

我需要从ASP.NET应用程序异步调用Web服务。 aspx不需要Web服务的答案。这只是一个简单的通知。如何从ASP.NET应用程序异步调用Web服务?

我使用web服务存根和<%@Page Async="True" %>中的...Async()方法。

ws.HelloWorldAsync(); 

我的问题:网页请求正在等待Web服务响应。

如何解决这个问题?如何避免Web服务关闭或重载时出现资源泄漏?

回答

0

在您的场景中,您可以使用ThreadPool ThreadPool.QueueUserWorkItem(...) 在池线程中调用Web服务。

0

我已经使用简单的线程来做到这一点。例如:

Thread t = new Thread(delegate() 
{ 
    ws.HelloWorld(); 
}); 
t.Start(); 

该方法返回后线程将继续运行。环顾四周,似乎ThreadPool方法isn't always recommended

+0

我明白使用ThreadPool会干扰ASP.NET的执行。但是创建许多线程会降低整个Web应用程序的性能。 – Jorge 2010-08-31 13:34:50

0

开始一个新的线程可能是最简单的解决方案,因为你不关心获得结果的通知。

new Thread(() => ws.HelloWorld()).Start 
1

Web服务代理通常也有Begin和End方法。你可以使用这些。下面的示例显示了如何调用begin方法并使用回调来完成呼叫。对MakeWebServiceAsynCall的调用将立即返回。使用声明将确保对象安全地处理。

void MakeWebServiceAsynCall() 
    { 
     WebServiceProxy proxy = new WebServiceProxy(); 
     proxy.BeginHelloWorld(OnCompleted, proxy); 
    } 
    void OnCompleted(IAsyncResult result) 
    { 
     try 
     { 
      using (WebServiceProxy proxy = (WebServiceProxy)result.AsyncState) 
       proxy.EndHelloWorld(result); 
     } 
     catch (Exception ex) 
     { 
      // handle as required 
     } 
    } 

如果您需要知道呼叫是否成功,您需要等待结果。

相关问题