一段时间后HttpClient无法响应

时间:2018-12-12 23:44:21

标签: c# asp.net dotnet-httpclient

我有一个使用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>();

我部署时遇到的错误:

  

错误2018-12-12 18:30:29,509 [11] Mvc.ExceptionHandling.AbpExceptionFilter-连接尝试失败,因为一段时间后连接方未正确响应,或者连接建立失败,因为连接的主机已失败回复   System.Net.Http.HttpRequestException:连接尝试失败,因为一段时间后连接方未正确响应,或者建立的连接失败,因为连接的主机未能响应---> System.Net.Sockets.SocketException:A连接尝试失败,因为一段时间后连接方未正确响应,或者建立的连接失败,因为连接的主机未能响应      在System.Net.Http.ConnectHelper.ConnectAsync(字符串主机,Int32端口,CancellationToken cancelToken)      ---内部异常堆栈跟踪的结尾---

网络通话通常需要1800毫秒才能完成,似乎超时约为21000毫秒。

我碰到了代码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();
    }
}

1 个答案:

答案 0 :(得分:1)

由于我与同一台计算机但端口不同,因此我将服务器代码中的公共IP更改为内部IP,问题得到解决。

在服务器代码中使用内部IP在客户端代码中使用公共IP已成为我的经验法则。如果这是不好的做法,请告诉我。