如何设置Silverlight网络客户端超时?
我在Silverlight应用程序中使用WebClient访问REST服务。异步调用的数量未知。 最酷的是,你可以命令你的请求和响应!响应与他们的请求相匹配!这是必要的,因为您不知道响应返回的顺序 但是,我如何通过WebClient获得通话“超时”?比如说15秒 我想坚持使用WebClient/此代码和委托/lambda。我知道WebRequest类有一个timeout属性,但我不确定是否可以用WebRequest替换WebClient,但保留该功能如何设置Silverlight网络客户端超时?,silverlight,asynchronous,httpwebrequest,webclient,Silverlight,Asynchronous,Httpwebrequest,Webclient,我在Silverlight应用程序中使用WebClient访问REST服务。异步调用的数量未知。 最酷的是,你可以命令你的请求和响应!响应与他们的请求相匹配!这是必要的,因为您不知道响应返回的顺序 但是,我如何通过WebClient获得通话“超时”?比如说15秒 我想坚持使用WebClient/此代码和委托/lambda。我知道WebRequest类有一个timeout属性,但我不确定是否可以用WebRequest替换WebClient,但保留该功能 int maxRequests = list
int maxRequests = list_S.Count;
// amount of URI
foreach (string item in list_S)
{
bool isValid = Uri.IsWellFormedUriString(item, UriKind.Absolute);
Uri uriTest;
if(isValid) //if it is valid Uri, send request
{
WebClient wc = new WebClient();
wc.DownloadStringCompleted += (s, args) =>
{
if (args.Error == null)
{
dict.Add((int)args.UserState, args.Result);
}
//here you test if it is the last request... if it is, you can
//order the list and use it as you want
if (dict.Count == maxRequests)
{
var orderedResults = dict.OrderBy(a => a.Key);
}
closeTabitem_SensorSource();
};
wc.DownloadStringAsync(new Uri(item), i++);
}
else
{
MessageBox.Show("Uri FAIL!: " + item);
}
}
WebRequest
也不提供管理请求超时的方法
您需要采取的方法是将
WebClient
与基于dispatchermer
的您自己的代码结合使用,该dispatchermer将调用WebClient
CancelAsync
方法。如果我没有弄错的话,会内置一个超时(大约30秒,来自内存)所以,如果你想要更短的超时时间,这种方法是可行的,但如果你想要更长的超时时间,这种方法就不行了。@Drew:我认为你错了。在服务器上延迟5分钟进行测试时,我无法使BrowserHttp或ClientHttp堆栈超时。当然,客户机和服务器上的代码之间可能存在各种其他设备,导致延迟,从而可能会进行干预并引发超时。但是,Silverlight似乎没有内置超时,或者如果有,则可能会过大。30秒会有点吝啬。@AnthonyWJones,谢谢你纠正我的错误。这和我现在正在做的工作有关,所以这很有帮助。