【问题标题】:HttpClient SendAsync from ASP .NET Core blocking calls down stack in Web API 2/Delphi来自 ASP .NET Core 的 HttpClient SendAsync 阻止调用 Web API 2/Delphi 中的堆栈
【发布时间】:2021-09-14 03:17:38
【问题描述】:

希望我能明白这一点..

我有 2 个工作流程:

  1. (测试成功)(c).NET WebAPI REST 端点 > (d)WebRequest 到 > (e)另一个 .NET WebAPI REST 端点 > (f)Delphi.NET 库
  2. (失败):(a)ASP.NET 5 Core REST 端点 > (b)HttpClient.SendAsync > (c)WebAPI REST 端点> (d)WebRequest 到 > (e)另一个 .NET WebAPI REST 端点 > (f )Delphi.NET 库(调用底层 Delphi 方法时的块)

(2) 是目标状态。从(c)开始,与1)完全相同。

  • 在 (2) 中,Fiddler 显示正确的 url/headers 在 (c) 处传递到 .WebAPI REST 端点 - 但在 ASP.NET Core 调用 (b) 超时之前它永远不会返回。

尝试过的事情(并非详尽无遗)

  • 在堆栈中添加了 ConfigureAwait(false)
  • 重写 .NET Framework 代码以使用 HttpClient
  • 在调用 Delphi.NET 的代码中添加异步
  • 删除 HttpClient 调用中的异步
  • 在 Startup 中为最终端点添加 EnableCors
  • 尝试增加和减少超时(在客户端和服务器上)
  • ConsoleApp 简化流程

使用 HttpClient 的标准代码

        HttpClient client = new HttpClient();
        client.BaseAddress = new Uri("http://localhost:xxxxx");
        client.DefaultRequestHeaders.Add("header1", "xxx");


        var uri = $"{client.BaseAddress}v1/CoreEndpoint";
        string jsonContent = JsonConvert.SerializeObject("{body}");

        var m = new HttpRequestMessage { RequestUri = new Uri(uri), Method = HttpMethod.Post };
        m.Content = new StringContent(jsonContent, Encoding.UTF8, "application/json");

        HttpResponseMessage response = await client.SendAsync(m);

【问题讨论】:

  • 请出示完整的(a)(b)。
  • (a) 是一个标准的控制器方法,带有 POST 调用 (b) 如上所述。

标签: c# asp.net-core delphi asp.net-web-api2 delphi.net


【解决方案1】:

也许缺少斜线:

    client.BaseAddress = new Uri("http://localhost:xxxxx");
    client.DefaultRequestHeaders.Add("header1", "xxx");


    var uri = $"{client.BaseAddress}v1/CoreEndpoint";

=> http://localhost:xxxxxv1/CoreEndpoint

如果改成这样行不行

    var uri = $"{client.BaseAddress}/v1/CoreEndpoint";

【讨论】:

  • BaseAddress 在斜线中添加,但很好的定位。在生产中 HttpClient 在启动时添加,例如 client.BaseAddress = new Uri($"{host}:{port}");然后 $"{_httpClient.BaseAddress}internal 返回主机/内部
猜你喜欢
  • 2018-12-15
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
  • 2019-06-29
  • 2015-11-01
  • 1970-01-01
相关资源
最近更新 更多