【问题标题】:HttpWebResponse.ReadTimeout - Timeouts not supported?HttpWebResponse.ReadTimeout - 不支持超时?
【发布时间】:2012-03-20 16:58:58
【问题描述】:

当我们尝试设置 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);
        }
    }

【问题讨论】:

    标签: c# httpwebrequest httpwebresponse


    【解决方案1】:

    您需要的是HttpWebRequest.ReadWriteTimeout 属性。

    它指定对响应Stream的读取(或写入)操作超时之前的毫秒数,抛出WebExceptionStatus设置为WebExceptionStatus.RequestCanceled

    来自msdn documentation

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

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

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

    【讨论】:

    • ShdNx,谢谢,我们正在考虑改成这个……但它仍然不能真正回答为什么我们会得到奇怪的结果!
    【解决方案2】:

    首先,确保responseStreamrequest 不为空。

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

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

    【讨论】:

    • 你的第二个陈述是什么意思?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多