我需要從ASP.NET應用程序異步調用Web服務。 aspx不需要Web服務的答案。這只是一個簡單的通知。如何從ASP.NET應用程序異步調用Web服務?
我使用web服務存根和<%@Page Async="True" %>
中的...Async()
方法。
ws.HelloWorldAsync();
我的問題:網頁請求正在等待Web服務響應。
如何解決這個問題?如何避免Web服務關閉或重載時出現資源泄漏?
我需要從ASP.NET應用程序異步調用Web服務。 aspx不需要Web服務的答案。這只是一個簡單的通知。如何從ASP.NET應用程序異步調用Web服務?
我使用web服務存根和<%@Page Async="True" %>
中的...Async()
方法。
ws.HelloWorldAsync();
我的問題:網頁請求正在等待Web服務響應。
如何解決這個問題?如何避免Web服務關閉或重載時出現資源泄漏?
在您的場景中,您可以使用ThreadPool ThreadPool.QueueUserWorkItem(...) 在池線程中調用Web服務。
我已經使用簡單的線程來做到這一點。例如:
Thread t = new Thread(delegate()
{
ws.HelloWorld();
});
t.Start();
該方法返回後線程將繼續運行。環顧四周,似乎ThreadPool方法isn't always recommended
開始一個新的線程可能是最簡單的解決方案,因爲你不關心獲得結果的通知。
new Thread(() => ws.HelloWorld()).Start
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
}
}
如果您需要知道呼叫是否成功,您需要等待結果。
我明白使用ThreadPool會干擾ASP.NET的執行。但是創建許多線程會降低整個Web應用程序的性能。 – Jorge 2010-08-31 13:34:50