Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何设置Silverlight网络客户端超时?_Silverlight_Asynchronous_Httpwebrequest_Webclient - Fatal编程技术网

如何设置Silverlight网络客户端超时?

如何设置Silverlight网络客户端超时?,silverlight,asynchronous,httpwebrequest,webclient,Silverlight,Asynchronous,Httpwebrequest,Webclient,我在Silverlight应用程序中使用WebClient访问REST服务。异步调用的数量未知。 最酷的是,你可以命令你的请求和响应!响应与他们的请求相匹配!这是必要的,因为您不知道响应返回的顺序 但是,我如何通过WebClient获得通话“超时”?比如说15秒 我想坚持使用WebClient/此代码和委托/lambda。我知道WebRequest类有一个timeout属性,但我不确定是否可以用WebRequest替换WebClient,但保留该功能 int maxRequests = list

我在Silverlight应用程序中使用WebClient访问REST服务。异步调用的数量未知。 最酷的是,你可以命令你的请求和响应!响应与他们的请求相匹配!这是必要的,因为您不知道响应返回的顺序

但是,我如何通过WebClient获得通话“超时”?比如说15秒 我想坚持使用WebClient/此代码和委托/lambda。我知道WebRequest类有一个timeout属性,但我不确定是否可以用WebRequest替换WebClient,但保留该功能

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,谢谢你纠正我的错误。这和我现在正在做的工作有关,所以这很有帮助。