我们遇到一个问题,当我们尝试设置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);
}
}
答案 0 :(得分:3)
您需要的是HttpWebRequest.ReadWriteTimeout属性。
它指定在响应Stream
超时读取(或写入)操作之前的毫秒数,将WebException
设置为WebExceptionStatus Status
。{ {1}}。
写入流时使用
RequestCanceled
属性 由ReadWriteTimeout
方法返回或从流中读取 由GetRequestStream
方法返回。具体来说,
GetResponseStream
属性控制超时ReadWriteTimeout
方法,用于读取由...返回的流Read
方法,以及用于GetResponseStream
方法的方法 写入Write
方法返回的流。要指定等待请求完成的时间,请使用 Timeout属性。
答案 1 :(得分:0)
首先,确保responseStream
和request
不为空。
他们,您应该确保服务器在尝试从中读取响应后确实响应了您的请求。
如果可以,请同时提供发送请求的代码。