Как установить тайм-аут при вызове WebClient? - PullRequest
2 голосов
/ 13 ноября 2010

У меня есть классика:

WebClient webClient = new WebClient();                    
webClient.Headers[HttpRequestHeader.ContentType] = "application/xml";
webClient.UploadStringAsync(new Uri(inputMessage.Namespace, UriKind.Absolute), inputMessage.ToXML());
webClient.UploadStringCompleted += new UploadStringCompletedEventHandler(ProcessResponse)

;

Но я хочу установить время ожидания запроса на что-то меньшее.Мой поиск в Google заставил меня использовать HttpWebRequest, но мне понравился API WebClient.Я закончил тем, что расширил WebClient и переопределил защищенный метод, который создал бы базовый HttpWebRequest:

protected override WebRequest GetWebRequest(Uri uri) {
            HttpWebRequest result = WebRequest.CreateHttp(uri);
            result.Timeout = someTimeOut;
            return result;
        }

Проблема в том, что в WP7 у HttpWebRequest нет свойства для установки Timeout, то есть просто в обычном .NET.

Так есть идеи?

Ответы [ 3 ]

1 голос
/ 15 ноября 2010

Существует пример того, как реализовать собственный тайм-аут в http://forums.silverlight.net/forums/p/80504/423951.aspx

Нет встроенного способа для тайм-аута.

1 голос
/ 18 июня 2013

Используйте клиентские библиотеки Microsoft HTTP вместо встроенной опции Silverlight.

https://nuget.org/packages/Microsoft.Net.Http/2.1.10

0 голосов
/ 13 ноября 2010

Это по замыслу. WebClient не имеет свойства тайм-аута. Это просто класс-оболочка для WebRequest ... IMO, это просто бокс. Одна из приятных особенностей WebClient заключается в том, что он использует Events, а не AsynCallbacks ... в конце оба класса используют BrowserHttpWebRequest. Вы можете просто использовать HttpWebRequest и избежать расширения ... как вы сделали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...