Как установить время ожидания Silverlight WebClient? - PullRequest
2 голосов
/ 20 октября 2011

Я использую WebClient в приложении Silverlight для доступа к службам REST.Это неизвестное количество асинхронных вызовов.Самое классное, вы можете заказать ваши запросы и ответы!ответы соответствуют их запросам!Это необходимо, поскольку вы не знаете, в каком порядке будут возвращаться ответы.

Но как мне получить «тайм-аут» для моих звонков с WebClient?скажем, 15 сек. Я бы хотел придерживаться WebClient / этого кода с делегатами / lambda.Я знаю, что есть свойство timeout с классом WebRequest, но я не уверен, можно ли просто заменить WebClient на WebRequest, но сохранить функциональность.

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 Ответ

3 голосов
/ 20 октября 2011

WebRequest также не позволяет управлять таймаутами запросов.

Подход, который вам нужно использовать, заключается в использовании WebClient в сочетании с вашим собственным кодом на основе DispatcherTimer, который вызовет метод WebClient CancelAsync.

...