0
我有一個調用WCF服務的ASP(MVC2)應用程序。該服務將需要很長時間,所以我不希望客戶端ASP應用程序等待它完成。它將其狀態記錄在數據庫中,並且可供ASP客戶端使用。
我正在異步調用服務,但是當它試圖轉換到下一頁時,我的ASP應用程序仍然掛起。我懷疑這是因爲線程掛着等待服務回覆。 實現此接口的最佳方式是什麼,以便ASP應用程序可以繼續並且不被阻止?異步WCF服務塊ASP應用程序
我有一個調用WCF服務的ASP(MVC2)應用程序。該服務將需要很長時間,所以我不希望客戶端ASP應用程序等待它完成。它將其狀態記錄在數據庫中,並且可供ASP客戶端使用。
我正在異步調用服務,但是當它試圖轉換到下一頁時,我的ASP應用程序仍然掛起。我懷疑這是因爲線程掛着等待服務回覆。 實現此接口的最佳方式是什麼,以便ASP應用程序可以繼續並且不被阻止?異步WCF服務塊ASP應用程序
如果您不想知道Web服務調用的結果,則不需要異步調用。你需要一種方式(也稱爲火和忘記)呼叫。添加IsOneWay=true
您OperationContract
,如:
[ServiceContract]
public interface MyServiceContract
{
[OperationContract(IsOneWay=true)]
void MyOperation(Data data);
}
一種方式操作必須返回void
。客戶端只會等待建立連接併發送數據。它不會等待處理結束。
正如拉迪斯拉夫所說,客戶端只會等待足夠長的時間來建立連接併發送請求,但它仍然在等待。如果您在客戶端配置了長時間的超時並且服務器沒有響應,您的ASP.NET線程將阻塞到客戶端超時值。因此,要麼將您的客戶端超時配置爲相對較短,要麼將新線程分配給每個呼叫。 – Brian 2011-02-26 18:03:57
我不知道單向選項。我以不同的方式解決了這個問題。我在服務中開始了一個新線程,並且完成了這項工作。同時,接收請求的線程立即返回給客戶端。這將客戶從服務中分離出來,讓他們同時進行。 – Frank 2011-02-28 05:45:32