我使用C#从windows服务调用外部web服务。
web服务在.NET中,GetRandomNumber()方法返回一个随机整数。GetRandomNumber()是异步调用的,web服务客户机代码如下所示:
Service1 s1 = new Service1();
s1.Timeout = 2000;
s1.GetRandomNumberCompleted += new GetRandomNumberCompletedEventHandler(s1_GetRandomNumberCompleted);
s1.GetRandomNumberAsync();我将超时设置为2秒(2000毫秒)。web服务调用,在大多数情况下需要5-10秒。但在这种情况下,超时不会发生。即使在超时期间结束后,客户端也会获得数据。我遗漏了一些东西,或者在异步调用web服务时是否有其他方法来使用超时?
-N
;
发布于 2010-10-14 14:46:32
这是一篇关于MSDN的文章的摘录,应该会有所帮助。
http://msdn.microsoft.com/en-us/library/ff647786.aspx#scalenetchapt10_topic14
异步调用Web服务。在本例中,您应该决定等待Web服务调用返回结果的秒数。使用WaitHandle时,您可以在WaitHandle上传递执行线程被阻塞的毫秒数,然后将请求中止到Web服务。下面的代码片段显示了这一点。
MyWebServ obj = new MyWebServ();
IAsyncResult ar = obj.BeginFunCall(5,5,null,null);
// wait for not more than 2 seconds
ar.AsyncWaitHandle.WaitOne(2000,false);
if (!ar.IsCompleted) //if the request is not completed {
WebClientAsyncResult wcar = (WebClientAsyncResult)ar;
wcar.Abort();//abort the call to web service
}
else
{ //continue processing the results from web service }https://stackoverflow.com/questions/3905610
复制相似问题