【发布时间】: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