System.Net.WebException:基础连接已关闭:超出了消息长度限制

时间:2013-11-14 14:05:58

标签: c# .net wpf windows-store-apps dotnet-httpclient

我正在为Windows商店开发一个休息客户端应用程序。一切顺利,直到收到的回复小于64K。我不知道该怎么办。我尝试使用HttpClient,检查应用程序功能,并搜索大多数属性以查找任何解决方案,但没有成功。

大多数人建议在Windows应用商店应用中设置HttpWebRequest.DefaultMaximumResponseHeadersLength或HttpWebRequest.MaximumResponseHeadersLength这些属性不可用(?)。也许我错过了一些参考文献。无论如何,任何建议都会有所帮助,因为我已经用尽了所有想法。

我得到的例外:

  

System.Net.Http.HttpRequestException:发送时发生错误   请求。 ---> System.Net.WebException:底层连接   已关闭:超出了邮件长度限制。

     

at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult)   asyncResult)
在   System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)

     

---内部异常堆栈跟踪结束---

     

在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()...

1 个答案:

答案 0 :(得分:0)

尝试将HttpClient.GetAsync()HttpCompletionOption.ResponseHeadersRead一起使用。这样就不会缓存响应。

即:

private async void Foo()
{
    HttpClient client = new HttpClient();

    // Do not cache response, use HttpCompletionOption.ResponseHeadersRead.
    HttpResponseMessage response = await client.GetAsync(
        "http://localhost/?big=2000000000",
        HttpCompletionOption.ResponseHeadersRead);

    // Consume response as a System.IO.Stream.
    Stream contentStream = await response.Content.ReadAsStreamAsync();

    int bytesRead;
    do
    {
        byte[] buffer = new byte[1000000];
        bytesRead = contentStream.Read(buffer, 0, buffer.Length);
    } while (bytesRead > 0);
}