【问题标题】:HttpClient's WebRequestHandler hanging with partial responseHttpClient 的 WebRequestHandler 挂起部分响应
【发布时间】:2013-07-16 21:27:46
【问题描述】:

我正在尝试在带有 .NET 4.0 的 ASP.NET MVC 控制器中将 WebRequestHandler 与 HttpClient 一起使用。我已经从 NuGet 安装了最新的 HttpClient。

将 WebRequestHandler 传递给 HttpClient 时,请求永远不会完成。通过调试代理查看,来自服务器的响应只是在某个点通过响应主体被切断。似乎没有关于它在哪里切断的模式。

这是一个测试用例:

public class HomeController : Controller
{
    public async Task<ActionResult> Index()
    {
        var handler = new WebRequestHandler();
        var httpClient = new HttpClient(handler);
        var google = await httpClient.GetStringAsync("http://www.google.com");
        return View(google);
    }
}

如果我用HttpClientHandler替换WebRequestHandler可以正常工作,但我需要添加一个客户端证书。

我尝试更改 WebRequestHandler 的各种设置,但无济于事。有什么想法吗?

【问题讨论】:

    标签: c# .net .net-4.0 dotnet-httpclient


    【解决方案1】:

    嗯,这似乎只是 HttpClient 中的一个错误和回归。

    我回到 v2.0.20710.0 并且工作正常。

    【讨论】:

    • 这适用于我使用最新的 HttpClient。你确定你没有泄露 GetStringAsync 返回的任务吗?
    • 非常肯定我不是...您尝试使用 .NET 4.0 了吗?
    • 是的,在控制台应用程序中使用您的示例在 4.0 和 4.5 上进行了尝试,而无需等待(只是得到 .Result)。我还在 4.0 中使用 Microsoft.BCL 异步包尝试了它。如果你有一个孤立的复制品,你可以分享它吗?
    • 刚刚在控制台应用程序中尝试过,效果很好。似乎是 ASP.NET 的问题。更新了上面的代码以显示完整的控制器。
    • 我看到您仍在示例中使用 await。我认为您正在使用 Microsoft.BCL.Async 包在 VS 2012 中开发?在这种情况下,您是在同一台机器上运行 NetFx 4.5 还是在另一台机器上运行 NetFX 4.0?
    猜你喜欢
    • 1970-01-01
    • 2013-11-03
    • 2017-10-31
    • 2018-11-17
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    相关资源
    最近更新 更多