我有一个使用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;
});
}
});
}
});
如果我检查该过程,则可以看到存在侦听连接,并且一旦浏览器连接即存在已建立的连接,如果浏览器窗口的关闭连接变为关闭等待状态。
那么我有什么办法可以确定问题在整个管道中从哪里开始?
答案 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>