HttpClient在一段时间后无法响应

3

我有一个使用Asp.Net Boilerplate的Asp.Net Core(2.1)网站。

我试图使用HttpClient进行API调用,本地工作正常,但在部署到IIS时会抛出错误。

我创建了一个TypedClient

public class FormsHttpClient : IFormsHttpClient
{
    private const string url = "my_url:3001/";
    private readonly HttpClient _client;

    public FormsHttpClient(HttpClient httpClient)
    {
        httpClient.BaseAddress = new Uri(url);

        _client = httpClient;
    }
    ....
}

在我的 startup.cs 文件中,我添加了以下代码: services.AddHttpClient<IFormsHttpClient, FormsHttpClient>(); 当我部署时出现的错误如下:

ERROR 2018-12-12 18:30:29,509 [11 ] Mvc.ExceptionHandling.AbpExceptionFilter - 因为连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。 System.Net.Http.HttpRequestException: 因为连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。---> System.Net.Sockets.SocketException: 因为连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败 at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken) --- End of inner exception stack trace ---

网络调用通常需要1800ms才能完成,但似乎在21000ms左右超时。
我发现了代码 AppContext.SetSwitch("System.Net.Http.useSocketsHttpHandler", false);,但不确定该将其放在哪里,于是将其放在我的 startup.cs 类的构造函数中,但它似乎没有任何效果。
还有其他我忽略的东西吗?
E:调用API的代码在JS中:
   app.forms.token = {
    generate: function () {
        Formio.logout();
        abp.services.app.forms.generateFormToken().done(function (e) {
            Formio.setToken(e);
        });
    },
    clear: function () {
        Formio.logout();
    }
}

你在哪里发起请求?!这只是注册服务... - Kos
如果本地代码可以正常运行,那么你的代码应该没问题。你确定你能从部署服务器上访问到那个 Web 服务(my_url:3001)吗? - Gabriel Luci
@kos 在 JS 中发出请求,调用返回 500 @gabriel,我可以在同一设备上使用 postman 进行相同的 api 调用,因此我肯定可以访问它。看起来是任何 HttpClientPostAsyncGetAsync 上都失败了,具体取决于我发出的哪个调用。 - highboi
可能是my_url:3001服务出了问题。在生产环境中,您正在请求某些东西,导致它崩溃。我建议使用一些工具(如Fiddler)来捕获请求并进行进一步调查... - Kos
1
@Kos 谢谢。我找到了一个解决方法,这可能是一个很好的解决方案。我不得不将IP更改为内部IP(10.200.x.xx)用于我的服务器代码,并在客户端代码中继续使用公共IP。我基本上是在尝试在不同的端口上访问同一台服务器。学习是有趣的 =D - highboi
1个回答

2
由于我正在与同一台机器但不同端口进行通信,因此我在服务器代码中将公共IP更改为内部IP,问题得到解决。
我已经将在服务器代码中使用内部IP和在客户端代码中使用公共IP作为惯例。如果这是不好的做法,请让我知道。

这不是个坏主意,如果运行某些非常繁忙的东西,它有时可以帮助保持端口使用率低。很难说这是否是导致您的程序运行更好的原因,但我很高兴它起作用了。 - Prof. Falken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接