日期:2014-05-19  浏览次数:20809 次

WebService异步调用中的超时设置问题。
我需要异步调用WebService,以便在客户端网络不通的情况下,先显示一个等待页面。等有响应后,在继续。代码如下:
private   string   AsyncGetServerVersion(GetVersion   ver,string   localPartName,string   localVersionNum)
{
IAsyncResult   result;

result   =   ver.BeginReturnPathFromServer(localPartName,localVersionNum,null,null);
Form   fWait   =   new   Form();
fWait.StartPosition   =   FormStartPosition.CenterScreen;
fWait.Height   =   150;
fWait.Width   =   300;
fWait.Location   =   this.Location;
fWait.Show();
Application.DoEvents();
fWait.Text   =   "正在连接网络,请稍等 ";
result.AsyncWaitHandle.WaitOne();
fWait.Close();
string   downloadName   =   ver.EndReturnPathFromServer(result);
return   downloadName;
}

为了缩短等待时间,我在代理类中添加了如下代码,来设置超时时间:
//通过重载来设置超时时间
protected   override   WebRequest   GetWebRequest(Uri   uri)
{
HttpWebRequest   wr   =   (HttpWebRequest)base.GetWebRequest(   uri   );
wr.Timeout   =   10*1000;
return   wr;
}

之后问题出现了。
如果我调用的是同步方法,比如:ver.ReturnPathFromServer(...);
那么设置的这个超时时间的是有效的。
如果我调用的是异步方法,那么这个超时时间好像一点效果都没有。

问:为什么会出现这样的问题,在异步情况下,我怎么设置超时时间?


------解决方案--------------------
我刚好也遇到这个问题,帮楼主顶!
------解决方案--------------------
参考http://www.cnblogs.com/oscarxie/archive/2007/01/13/619493.aspx
------解决方案--------------------
ref:http://www.rainsts.net/article.asp?id=166