【问题标题】:HttpClient in ASP.NET Core razor async stuckASP.NET Core razor 中的 HttpClient 异步卡住
【发布时间】:2021-04-25 07:27:09
【问题描述】:

我在将 ASP.NET Core 与托管在 IIS(不在 IIS Express 中)的应用程序中使用时遇到问题...

这是我的配置:

启动:

services.addHttpClient()

页面:

private readonly IHttpClientFactory _clientFactory;

public testModel(IHttpClientFactory clientFactory)
{
    _clientFactory = clientFactory;
}

public async void OnGet()
{
    var client = _clientFactory.CreateClient();
    client.BaseAddress = new Uri("http://localhost:37199/");
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

    // GET Method  
    HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "apiprueba/test");
    var response = await client.SendAsync(request);            
}

问题:当我执行页面时,我从来没有得到页面的响应(测试)。它只发生在 IIS 上 - 而不是 IIS Express。可能是什么问题?

更新: 新测试..使用简单的 asp 核心控制台没有响应。 代码

static async System.Threading.Tasks.Task Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            var client = new HttpClient();
            client.BaseAddress = new Uri("http://127.0.0.1:88/");
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            //GET Method  
            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "api/mensaje");
            client.Timeout = TimeSpan.FromSeconds(30);
            var response = await client.SendAsync(request).ConfigureAwait(false);
            Console.WriteLine(response.ToString());
            Console.WriteLine("Finished");
        }

含义: 结果: 本地机器: 5秒后显示错误.. 服务器: 你好世界! _ ...代码在 10 分钟后仍在运行..没有回答错误或完成该过程..

似乎是服务器出了问题……不知道为什么

更新:在检查服务器后..WinHttp 服务已停止...如果我尝试手动启动会出错..重新启动服务器解决了问题..服务启动正常并且来自应用程序的请求是正确的..

【问题讨论】:

  • 能否提供控制器和整页代码?目前尚不清楚您的预期结果是什么,当您说它只发生在 IIS 而不是 IIS Express 时,您是什么意思?会发生什么?
  • 您的 api(即:http://localhost:37199/)是否可以从浏览器访问?
  • 永远不会得到页面的响应 - 这是一个抽象的描述。它必须在错误中返回成功或失败的响应。您应该添加日志记录以注销所有错误以查看生产中的问题(据我了解,您将代码部署到 IIS 服务器)。
  • 添加一些日志记录以获取卡住的位置。或者使用 PerfView 捕获跟踪。或者捕获内存转储并分析它(DebugDiag.Analysis)。或者使用 dotnet-stacks 查看它挂在哪里。
  • "just hangs" 有时意味着线程死锁。尝试将ConfigureAwait(false) 添加到您的 SendAsync

标签: c# api asp.net-core async-await httpclient


【解决方案1】:

WinHttp服务已停止..无法手动运行..重新启动服务器后服务正常启动,所有程序和测试都成功。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    相关资源
    最近更新 更多