【问题标题】:Kestrel on Windows no responseWindows 上的 Kestrel 没有响应
【发布时间】:2018-11-14 17:48:38
【问题描述】:

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

如果我检查进程,我可以看到有一个监听连接,一旦浏览器连接,就会建立一个连接,如果浏览器窗口关闭连接进入关闭等待状态。

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

【问题讨论】:

  • 您使用的是哪个浏览器?查找您提供的错误消息会显示此 SO 线程和一堆 SNTP 链接。
  • 所有浏览器的行为都是相同的。使用 Postman 调用 WEB Api 端点的行为完全相同。我不是专家,但在浏览器方面似乎请求永远不会超时,希望这些信息也有用。
  • 所有浏览器都返回完全相同的错误信息?这似乎令人怀疑。您是否从红隼或 IIS 控制台或日志中看到该错误消息?
  • 没有错误消息只是“等待主机”我可以清楚地看到服务器上接受了连接但没有任何反应,控制台日志记录也显示零信息,因为没有任何反应。
  • 是的,错误消息的准确措辞对于接收有关 SO 的相关响应至关重要。

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


【解决方案1】:

所以问题似乎是一些依赖的 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    相关资源
    最近更新 更多