C# HttpWebRequest中的ObjectDisposedException

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

我在Compact框架中创建一个web请求,如下所示

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源代码,但尝试上面的代码可能会更快。