先说下碰到的问题吧:
在腾讯云上发布了一个.net core网站,网站有个功能是对外开放一个端口,与客户端建立TCP长连接,初始化的方法写在了StartUp类里,在IIS上点击启动,对外开放了端口,客户端长链接建立没问题,但是每隔十多分钟,客户端就会抛出“目标地址拒绝连接”的异常,也就是说服务器关闭了该端口,查看服务器打点日志,发现每隔一会StartUp就会执行一次,即网站会莫名自动重启,具体的windows日志为:“Application 'MACHINE/WEBROOT/APPHOST/***' has shutdown.”,
“Application 'C:\Users\Administrator\Desktop\***' started successfully.”
确认了IIS的网站会自动重启,经过排查发现是IIS的应用程序池回收的机制问题,IIS的默认设置里面,如果一个站点所处的应用程序池超过一段时间没有被访问或者请求,IIS就会自动回收这个程序池,并且把进程杀掉。那进程里面的线程肯定也活不下来了。PS:看样子IIS判断应用程序是否被访问和请求只是要求http协议,使用TCP开放个端口访问不被当做被访问。
最后关闭了IIS的应用程序池自动回收解决了该问题
操作如下:
在IIS中找到这个站点所用的程序池,点击“高级设置...”
在打开的列表中更改以下设置:
回收——固定时间间隔(分钟) 改为 0
——虚拟/专用内存限制(KB) 改为 0
进程模型——闲置超时(分钟) 改为 0(我的应该是因为这个选项没调成0)
附上解决该问题参考的文章:https://www.cnblogs.com/hushaojun/p/5016332.html