Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 应用程序池回收期间与服务器的信号器(版本1)集线器连接_C#_Asp.net_Asp.net Mvc 4_Asp.net Web Api_Signalr Hub - Fatal编程技术网

C# 应用程序池回收期间与服务器的信号器(版本1)集线器连接

C# 应用程序池回收期间与服务器的信号器(版本1)集线器连接,c#,asp.net,asp.net-mvc-4,asp.net-web-api,signalr-hub,C#,Asp.net,Asp.net Mvc 4,Asp.net Web Api,Signalr Hub,我们有几个服务器运行ASP.NET Web API应用程序。Web API是从用C#编写的Windows桌面客户端应用程序访问的。客户端使用signarHubConnection对象启动与服务器的反向通道,通过该通道接收实时反馈(日志语句、状态等)。去年,我们的一位用户报告客户端定期遇到以下错误: 远程主机已强制关闭现有连接 当引发HubConnection.error事件时,会收到此错误。我深入查看了服务器端的Windows事件查看器日志,发现这些错误与以下事件的发生完全一致: 为应用程序池“

我们有几个服务器运行ASP.NET Web API应用程序。Web API是从用C#编写的Windows桌面客户端应用程序访问的。客户端使用signar
HubConnection
对象启动与服务器的反向通道,通过该通道接收实时反馈(日志语句、状态等)。去年,我们的一位用户报告客户端定期遇到以下错误:

远程主机已强制关闭现有连接

当引发
HubConnection.error
事件时,会收到此错误。我深入查看了服务器端的Windows事件查看器日志,发现这些错误与以下事件的发生完全一致:

为应用程序池“ASP.NET v4.0”提供服务的进程在关闭期间超过了时间限制。进程id为“xxxx”

应用程序池回收事件发生90秒后立即发生此事件:

为应用程序池“ASP.NET v4.0”提供服务的进程id为“xxxx”的工作进程已请求回收,因为该工作进程已达到其允许的处理时间限制

很明显,为ASP.NET v4.0应用程序池提供服务的旧工作进程未能在90秒的关闭时间限制内关闭。我做了一些进一步的实验,发现以下请求保留在请求队列中,导致工作进程被迫关闭:

我们当时使用的信号器库的版本是1.0.20228.0

去年,我们在客户端和服务器上都升级到了SignalR版本2.2.31215.272。这一变化似乎解决了我上面描述的问题。“signar/connect”请求在集线器连接的生命周期内仍然保留,但当应用程序池回收客户端和服务器时,会正常地重新连接,而不会出现任何问题。显然,在信号器V1和V2之间进行了一些修复,这使得它能够以更优雅的方式处理应用程序池回收事件

就我个人的理解而言,为什么这个问题是由信号器库的V1引起的,以及解决这个问题的V1和V2之间发生了什么变化

谢谢