首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步调用web服务时设置超时

异步调用web服务时设置超时
EN

Stack Overflow用户
提问于 2010-10-11 11:05:09
回答 1查看 4.8K关注 0票数 0

我使用C#从windows服务调用外部web服务。

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

代码语言:javascript
复制
Service1 s1 = new Service1();
s1.Timeout = 2000;
s1.GetRandomNumberCompleted += new GetRandomNumberCompletedEventHandler(s1_GetRandomNumberCompleted);
s1.GetRandomNumberAsync();

我将超时设置为2秒(2000毫秒)。web服务调用,在大多数情况下需要5-10秒。但在这种情况下,超时不会发生。即使在超时期间结束后,客户端也会获得数据。我遗漏了一些东西,或者在异步调用web服务时是否有其他方法来使用超时?

-N

EN

回答 1

Stack Overflow用户

发布于 2010-10-14 14:46:32

这是一篇关于MSDN的文章的摘录,应该会有所帮助。

http://msdn.microsoft.com/en-us/library/ff647786.aspx#scalenetchapt10_topic14

异步调用Web服务。在本例中,您应该决定等待Web服务调用返回结果的秒数。使用WaitHandle时,您可以在WaitHandle上传递执行线程被阻塞的毫秒数,然后将请求中止到Web服务。下面的代码片段显示了这一点。

代码语言:javascript
复制
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 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3905610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档