2012-03-20 112 views
3

当我们尝试设置System.Net.HttpWebResponse对象的ReadTimeout属性时,我们遇到了一个问题,即在产品的单个实例中,我们收到InvalidOperationException异常。HttpWebResponse.ReadTimeout - 超时不支持?

此问题仅发生在单个实例上,我们有许多多个活动网站没有此问题。我们试图在本地重新创建问题,但无济于事。

以下代码说明了此问题。

任何想法都非常受欢迎。

感谢

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); 
     } 
    } 

回答

3

你需要的是HttpWebRequest.ReadWriteTimeout属性。

它指定的毫秒数的读出(或写入)的响应操作出来Stream倍之前,一个WebExceptionStatus组投掷到WebExceptionStatusRequestCanceled

msdn documentation:写入由GetRequestStream方法或从由GetResponseStream方法返回的流 读取返回的流 时

ReadWriteTimeout属性被使用。

具体地说,ReadWriteTimeout属性控制超时 的Read方法,其用于读取由 GetResponseStream方法返回的流,并为Write方法,它是用来 写入到返回的流由GetRequestStream方法。

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

+0

ShdNx,谢谢,我们正在改变这个......但它仍然没有真正回答为什么我们会得到奇怪的结果! – 2012-03-20 21:49:36

0

首先,确保responseStreamrequest不为空。

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

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

+0

Rafael,谢谢你的回应。 responseStream不为null。 – 2012-03-20 17:31:55

+0

你的第二个陈述是什么意思? – 2012-03-20 17:32:31