2013-03-18 45 views
2

我的Webservice繼承自System.Web.Services.Protocols.SoapHttpClientProtocol設置超時異步Web服務調用?

我試圖設置超時:

service.Timeout = 5000; // 5 secs 

但沒有任何反應 - 沒有一個TimeoutException也沒有別的。一旦我在沒有任何聲明的情況下嘗試了它,它就花費了190秒的時間來拍攝"Connection Timed Out"。 190我覺得很奇怪,默認是100秒。

無論如何,超時屬性似乎在「唯一」同步調用,所以在我的情況,我不想知道爲什麼它不工作。

我打電話的方法異步那樣:

service.GetInfoCompleted += service_GetInfoCompleted; 
service.GetInfoAsync(); 

我怎麼能解決我的問題?

任何幫助表示讚賞!

+0

您的問題尚不清楚。你在調用同步還是異步方法? – 2013-03-18 10:25:54

+0

編輯該問題,希望現在更清晰 – eMi 2013-03-18 10:28:08

回答

1

由於有這樣的沒有「本地」的方式 - 我不得不實現一個自己的Timer

經過時間b.e 10秒之後我可以調用異步方法調用的Abort()

+0

我會建議使用['CancelAsync'](https://msdn.microsoft.com/en-us/library/system.web.services.protocols.httpwebclientprotocol。 cancelasync.aspx)而不是'Abort'。看起來像'Abort'只會取消最後一個請求,所以它不適合在您的代理上進行併發調用。沒有測試過,只要閱讀'ClientProtocol'代碼。 – foka 2017-08-07 10:24:09

0

您的service.GetInfoAsync()應返回IAsyncResult。您可以等待5秒鐘,操作完成,如果沒有,處理超時:

var result = service.GetInfoAsync(); 

if(!result.AsyncWaitHandle.WaitOne(5000)){ 
    // handle timeout 
} 
+2

如果他想在發出呼叫後等待,他可以首先使用同步代碼。 – usr 2013-03-18 10:50:16

+0

那麼在我的情況'GetInfoAsync()'返回無效 – eMi 2013-03-18 10:52:19