Windows上的Kestrel没有回应

时间:2018-11-14 17:48:39

标签: c# asp.net-core-mvc kestrel-http-server

我有一个使用Kestrel作为http服务器的自托管mvc项目。 由于某些原因,从Windows Server 2016到Windows 10的某些计算机上,尝试通过http访问应用程序时未收到响应。 浏览器只是挂在等待服务器地址中。 正如我所说,这仅发生在1%的安装中,但是我需要弄清楚。 我试图将配置减到最少,并且服务器仍然没有响应,控制台记录器也没有显示记录,好像什么也没发生,所以在启动或发出请求时没有错误或任何错误的迹象。

这是我的WebHostBuilder代码

       var hostBuilder = new WebHostBuilder()
                    .UseStartup<WebStartup>()
                    .UseKestrel(kestrelOptions =>
                    {
                        //listen on configured web port
                        kestrelOptions.ListenAnyIP(WEB_PORT, options=>
                        {
                        });

                        if (HTTPS_ENABLE)
                        {
                            kestrelOptions.Listen(IPAddress.Any, HTTPS_PORT, listenOpt =>
                            {
                                if (string.IsNullOrWhiteSpace(HTTPS_PFX_FILE) || !File.Exists(HTTPS_PFX_FILE))
                                {
                                    TraceInitMessage($"PFX file not found.");
                                }
                                else if (string.IsNullOrWhiteSpace(HTTPS_PFX_PASSWORD))
                                {
                                    TraceInitMessage($"PFX file password is invalid.");
                                }
                                else
                                {
                                    listenOpt.UseHttps(HTTPS_PFX_FILE, HTTPS_PFX_PASSWORD, httpsOptions =>
                                    {
                                        httpsOptions.SslProtocols = System.Security.Authentication.SslProtocols.Default;
                                    });
                                }
                            });
                        }
                    });

如果我检查该过程,则可以看到存在侦听连接,并且一旦浏览器连接即存在已建立的连接,如果浏览器窗口的关闭连接变为关闭等待状态。

那么我有什么办法可以确定问题在整个管道中从哪里开始?

1 个答案:

答案 0 :(得分:0)

这个问题似乎是一些相关的dll没有程序集绑定重定向。 添加以下配置可解决问题

      <dependentAssembly>
    <assemblyIdentity name="System.Threading.Overlapped" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-0.0.0.0" newVersion="4.1.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Net.Sockets" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-0.0.0.0" newVersion="4.2.0.0" />
  </dependentAssembly>