C# HttpWebRequest中的ObjectDisposedException
我在Compact框架中创建一个web请求,如下所示C# HttpWebRequest中的ObjectDisposedException,c#,.net,httpwebrequest,compact-framework,webrequest,C#,.net,Httpwebrequest,Compact Framework,Webrequest,我在Compact框架中创建一个web请求,如下所示 HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("Url"); using (StreamWriter streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) streamWriter.Write("body"); using (HttpWebResponse res
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("Url");
using (StreamWriter streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
streamWriter.Write("body");
using (HttpWebResponse response = httpWebRequest.GetResponse() as HttpWebResponse)
using (StreamReader streamReader = new StreamReader(response.GetResponseStream()))
{
string json = streamReader.ReadToEnd();
}
我得到了一个ObjectDisposedException
。
我将此错误归咎于response.GetResponseStream()
,但此代码有什么问题
堆栈跟踪为
System.ObjectDisposedException
ObjectDisposedException- at System.Threading.Timer.throwIfDisposed()
at System.Threading.Timer.Change(UInt32 dueTime, UInt32 period)
at System.Threading.Timer.Change(Int32 dueTime, Int32 period)
at System.Net.HttpWebRequest.ConnectionClient.Read(Byte[] data, Int32 offset, Int32 length)
at System.Net.HttpReadStream.NetworkRead(Byte[] data, Int32 offset, Int32 length)
at System.Net.ContentLengthReadStream.doRead(Byte[] data, Int32 offset, Int32 length)
at System.Net.HttpReadStream.ReadToDrain(Byte[] buffer, Int32 offset, Int32 length)
at System.Net.HttpReadStream.doClose()
at System.Net.ContentLengthReadStream.doClose()
at System.Net.HttpReadStream.Finalize()
我怀疑这是由于您处理了
StreamWriter
,而StreamWriter又处理了请求流。我不知道这会对请求本身造成什么影响,但我猜这就是问题的症结所在
您可以随时使用Reflector深入BCL以查看到底发生了什么,但尝试这样的测试可能会更快更容易:
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("Url");
StreamWriter streamWriter;
try
{
streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
streamWriter.Write("body");
using (HttpWebResponse response = httpWebRequest.GetResponse() as HttpWebResponse)
using (StreamReader streamReader = new StreamReader(response.GetResponseStream()))
{
string json = streamReader.ReadToEnd();
}
}
finally
{
streamWriter.Dispose();
}
您好,“write方法”使用GetRequestStream,“read”使用GetResponseStream。这些都是在HttpWebRequest中常见的内部处理方式?我不确定它们是如何在内部处理的。正如我所建议的,您可以使用Reflector来检查BCL源代码,但尝试上面的代码可能会更快。