2012-03-20 38 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