HttpWebResponse.ReadTimeout - таймауты не поддерживаются? - PullRequest
3 голосов
/ 20 марта 2012

У нас есть проблема, когда на одном экземпляре нашего продукта мы получаем исключение InvalidOperationException, когда мы пытаемся установить свойство ReadTimeout объекта System.Net.HttpWebResponse.

Эта проблема возникает только наединичный случай, когда у нас есть много живых сайтов без этой проблемы.Мы попытались воссоздать проблему локально, но безрезультатно.

Следующий код иллюстрирует проблему.

Любые идеи приветствуются.

Спасибо

    private static XmlReader GenerateReaderFromResponse(HttpWebResponse response, HttpWebRequest request)
    {
        Stream responseStream = response.GetResponseStream();
        responseStream.ReadTimeout = request.Timeout; //This is where the exception is generated - System.InvalidOperationException: Timeouts are not supported on this stream.

        using (StreamReader responseReader = new StreamReader(responseStream, System.Text.Encoding.UTF8))
        {
            XmlReaderSettings readerSettings = new XmlReaderSettings();
            readerSettings.ProhibitDtd = false;
            string responseContent = responseReader.ReadToEnd();
            return XmlReader.Create(new StringReader(responseContent), readerSettings);
        }
    }

Ответы [ 2 ]

3 голосов
/ 20 марта 2012

Вам нужно только свойство HttpWebRequest.ReadWriteTimeout .

Указывает количество миллисекунд до операции чтения (или записи) ответа Stream раз, выбрасываяWebException с Status, установленным на WebExceptionStatus . RequestCanceled.

Из документации msdn :

* 1018Свойство * используется при записи в поток, возвращенный методом GetRequestStream, или при чтении из потока, возвращенного методом GetResponseStream.

В частности, свойство ReadWriteTimeout контролирует время ожидания для *Метод 1024 *, который используется для чтения потока, возвращенного методом GetResponseStream, и для метода Write, который используется для записи в поток, возвращенный методом GetRequestStream.

Toукажите время ожидания для завершения запроса, используйте свойство Timeout .

0 голосов
/ 20 марта 2012

Сначала убедитесь, что responseStream и request не равны нулю.

Их, вы должны убедиться, что сервер действительно ответил на ваш запрос после попытки прочитать ответ с него.

Если можете, укажите также код, который отправляет запрос.

...