HttpWebResponse.ReadTimeout - 不支持超时?

时间:2012-03-20 16:58:58

标签: c# httpwebrequest httpwebresponse

我们遇到一个问题,当我们尝试设置System.Net.HttpWebResponse对象的ReadTimeout属性时,在我们产品的单个实例上会收到InvalidOperationException异常。

此问题仅发生在单个实例上,我们有许多多个实时网站没有此问题。我们试图在本地重新创建这个问题,但没有用。

以下代码说明了该问题。

非常欢迎任何想法。

由于

    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 个答案:

答案 0 :(得分:3)

您需要的是HttpWebRequest.ReadWriteTimeout属性。

它指定在响应Stream超时读取(或写入)操作之前的毫秒数,将WebException设置为WebExceptionStatus Status。{ {1}}。

来自msdn documentation

  

写入流时使用RequestCanceled属性   由ReadWriteTimeout方法返回或从流中读取   由GetRequestStream方法返回。

     

具体来说,GetResponseStream属性控制超时   ReadWriteTimeout方法,用于读取由...返回的流   Read方法,以及用于GetResponseStream方法的方法   写入Write方法返回的流。

     

要指定等待请求完成的时间,请使用   Timeout属性。

答案 1 :(得分:0)

首先,确保responseStreamrequest不为空。

他们,您应该确保服务器在尝试从中读取响应后确实响应了您的请求。

如果可以,请同时提供发送请求的代码。