当前位置: 代码迷 >> Web Service >> 怎么解决webservice的超时
  详细解决方案

怎么解决webservice的超时

热度:640   发布时间:2012-01-01 23:10:55.0
如何解决webservice的超时
webservcie在执行一些逻辑,我想在webservice的中设置一个时间,例如20s,如果还是没有得到执行逻辑的结果,就在20s的时候返回给用户结果,这样用户不会继续等待。这个代码如何实现啊?

谢谢!

------解决方案--------------------
IIS好像可以设置超时时间,你可以试试
------解决方案--------------------
我觉得你webservice接收数据的时候,接收完成就应该告诉用户,你已经接收到数据了,然后数据处理应该是服务器的事情,即使处理失败,那也是服务器的事情了,弄个错误失败机制出来就好了
------解决方案--------------------
1. 服务器端设置超时 

在 web.config 的 system.web 里添加如下配置项: 

< httpRuntime
executionTimeout="30"
/> 

以上时间单位是秒. 

记得要把 web.config 的 debug 模式关闭: 

< compilation 
defaultLanguage="c#"
debug="false"
/> 

如果 debug 模式没有关闭, executionTimeout 会被忽略. 这时候, 如果应用是在单步跟踪的模式下, 根据经验, 超时时间大约是 90 秒(在 machine.config 里设置的, 我猜的^_^), 如果不是在单步跟踪的模式下, 超时时间可能是 20 分钟(也是我猜的, 因为其 session 的缺省超时时间是 20 分钟, 哈). 我懒得找微软的文档作进一步的求证了, 反正我用不着知道 debug 模式下的确切超时时间. 

2. 客户端设置超时 

在 WebService 的客户端代理程序(用 wsdl.exe 生成)里设置 Request 超时时间, 单位是毫秒:
protected override WebRequest GetWebRequest(Uri uri)
{
HttpWebRequest wr = (HttpWebRequest)base.GetWebRequest( uri );
wr.Timeout = 30*1000;
return wr;
}


------解决方案--------------------
DownLoadWSvs = new downDataWeb.DownDataWebS();
DownLoadWSvs.Url = Common.CommonUtil.GetWebReferenceValue("OfflineOrder_Biz_downDataWeb_DownDataWebS");
DownLoadWSvs.Timeout = 3*60*1000;

调用的时候。就是3分钟没结果的话就抛出异常。

所以在调用方法的时候
try{

}catch( SOAPException ex)
{
....
}
  相关解决方案