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