希望我能在这里明白这一点..
我有 2 个工作流程:
- (测试成功)(c).NET WebAPI REST 端点 >(d)WebRequest 到 >(e)另一个 .NET WebAPI REST 端点 >(f)Delphi.NET 库
- (失败):(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);