我使用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
答案 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 }