异步调用Web服务时设置超时

时间:2010-10-11 11:05:10

标签: c# web-services

我使用C#从Windows服务调用外部Web服务。

Web服务使用.NET。 Web方法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

1 个答案:

答案 0 :(得分: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 }