【问题标题】:Proper way of reading from a HttpWebResponse and .NET 4.0 Framework从 HttpWebResponse 和 .NET 4.0 框架中读取的正确方法
【发布时间】:2010-12-10 19:36:25
【问题描述】:

我们目前在读取过去没有问题的 ResponseStream 时遇到问题。自从昨晚将 .NET 4.0 Framwework 添加到我们的服务器并分配 IIS 以使用新框架后,我们在尝试使用以下语句读取 responseStream 时遇到了一些不同的异常 (responseStream = httpResponse.GetResponseStream();)。到目前为止,一切都很好。因此,我正在寻找有关如何从响应中读取的更改/改进。我在下面粘贴了我们正在使用的代码以及我们遇到的异常。

我们的环境是:

.NET 框架 4.0 视窗服务器 2003

代码:

        HttpWebResponse httpResponse;
        Stream responseStream;
        //Accept All Certificate Policy 
        ServicePointManager.ServerCertificateValidationCallback += delegate { return true; };

        HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(new Uri(theUrl));
        httpRequest.Method = "POST";
        httpRequest.KeepAlive = false;
        httpRequest.Timeout = timeOut;


        try
        {
            httpResponse = (HttpWebResponse)httpRequest.GetResponse();
            responseStream = httpResponse.GetResponseStream();
        }

例外情况:

'httpResponse.GetResponseStream().Length' 抛出了一个类型为 'System.NotSupportedException' long {System.NotSupportedException}的异常

'httpResponse.GetResponseStream().Position' 抛出了一个类型为'System.NotSupportedException' long {System.NotSupportedException}的异常

{“此流不支持搜索操作。”} System.SystemException {System.NotSupportedException}


问候,

迈克

【问题讨论】:

  • 好吧,我不确定它是否是您的问题的原因,但您正在使用 Method="POST" 而不发送任何数据。我想你可能想要“GET”

标签: c# .net-4.0 httpwebresponse


【解决方案1】:

您还没有显示尝试使用长度的代码位 - 但基本上,不能保证您会知道流的长度。服务器可能没有给出内容长度标头。

如果您需要处理流,最好将所有数据复制到MemoryStream 中。使用 .NET 4,这真的很容易:

MemoryStream ms = new MemoryStream();
responseStream.CopyTo(ms);

如果您实际上不需要任何长度(例如,您只想将结果作为 XML 文档加载),那么只需从流中读取而不调用 Length

请注意,如果可能的话,在初始化时声明变量通常是一种很好的做法 - 您应该对 Web 响应和响应流使用 using 语句。

【讨论】:

  • 乔恩,感谢您的快速回复。我们在没有调用任何长度方法的情况下得到了异常。它们在调用 .GetResponseStream() 方法时发生,该方法可能会自行调用长度。我将尝试 MemoryStream 方法,看看它对我有什么帮助。
  • @Rhino:你当然不应该仅仅通过调用GetResponseStream 得到它。这听起来很奇怪。这是公共网址吗?如果你能给我们一个简短但完整的程序来演示这个问题,那真的很有帮助。另外,你能发布一个完整的堆栈跟踪吗?
  • 此时我退缩了,将软件退回到 3.5 框架,现在一切正常。不知道为什么会有很大的不同,但如果有人知道,我很想知道答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-02
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
相关资源
最近更新 更多