2010-10-11 70 views
0

我正在使用C#从Windows服务调用外部Web服务。异步调用Web服务时设置超时

该Web服务是在.NET中。 Web方法GetRandomNumber()返回一个随机整数。该getRandomNumber的()是异步调用 Web服务客户端代码如下:

Service1 s1 = new Service1(); 
s1.Timeout = 2000; 
s1.GetRandomNumberCompleted += new GetRandomNumberCompletedEventHandler(s1_GetRandomNumberCompleted); 
s1.GetRandomNumberAsync(); 

我设置了超时2secs(2000毫秒)。 Web服务调用在大多数情况下需要5-10秒。但在这种情况下,超时不会发生。 即使在超时时间结束后,客户端也会获取数据。 我错过了一些事情或有任何其他方式来异步调用Web服务时使用超时?

-N

;

回答

0

这是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 }