如何在Silverlight中设置WebClient超时?

时间:2011-10-20 13:43:08

标签: silverlight asynchronous httpwebrequest webclient

我在Silverlight应用程序中使用WebClient来访问REST服务。它是一个未知数量的异步调用。 很酷的是,您可以订购您的请求和回复!回复与他们的要求相匹配!这是必要的,因为您不知道响应将以何种顺序返回。

但是如何通过WebClient为我的通话获得“超时”?比方说15秒 我想通过委托/ lambda坚持使用WebClient / this代码。我知道WebRequest类有一个超时属性,但我不确定是否可以用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);
            }
        }

1 个答案:

答案 0 :(得分:3)

WebRequest也没有提供管理请求超时的方法。

您需要采取的方法是将WebClient与您自己的代码结合使用DispatcherTimer,并调用WebClient CancelAsync方法。