2013-03-18 44 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