0

我正在为 Windows 商店开发一个休息客户端应用程序。一切都很顺利,直到收到的响应小于 64K。我不知道如何进行。我尝试使用 HttpClient,检查应用程序功能,并在大多数属性中搜索任何解决方案,但均未成功。

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

我得到的例外:

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

在 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() ...

4

1 回答 1

0

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

IE:

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);
}
于 2013-11-14T20:44:44.530 回答