问题描述: c#
在利用asp.net + c# + IIS开发网站的时候,在Global.asax中开启了一个监听socket线程,用来收发数据,在运行的过程当中发现,线程运行一段时间以后便会中止,而后在IIS中浏览一下部署的网站,程序又自动运行。此刻心里变开始困惑究竟是什么缘由致使这个过程。 服务器
困惑问题: 并发
1线程无端中止,浏览网页后程序又运行。 asp.net
2在部署网站成功后,线程不运行。浏览网页后线程运行。 socket
问题1缘由: ide
IIS7.0部署的时候,程序池的高级设置中:回收-固定时间间隔设置为0;进程模型-闲置超时(分钟)设置为0; 网站
网站是部署在IIS上的,IIS在把网站绑定到【应用程序池】的时候,【应用程序池】有一个默认设置,能够右击【应用程序池】->【高级设置】看到下图所示: spa
高级设置中有六个大项为:常规、CPU、回收、进程孤立、进程模型、快速故障防御。 操作系统
既然看到了,不妨了解一下几项的功能,咱们不能只是知其然,不知因此然。下面咱们开个小差,分析一下这个六个功能都是用来干什么的。 .net
常规功能:
.net framwork版本 | v4.0 >>>这个不用讲你们也知道是所用的.net framwork的版本。
队列长度 | 1000 >>>Internet Information Services (IIS) 限制了在任何给定时间可在队列中等待的应用程序池请求的最大数量。若是达到此限制,则全部新请求都将被拒绝,并且用户将收到错误消息“503 – 服务不可用”。默认状况下,IIS 将队列长度设置为 1,000 个请求。该默认值可能过低,由于若是队列长度为 1,000,Communicator Web Access(2007 R2 发行版)将只能处理大约 650 个并发用户,此后将开始拒绝新用户。为帮助确保 Communicator Web Access 服务的可用性,建议将 IIS 队列长度值设置为预期最多用户数的 1.5 倍。例如,假定您预期在给定时间最多有 2,000 名用户登陆到 Communicator Web Access。在此状况下,应将队列长度设置为 3,000(即 2,000 名用户的 1.5 倍)。简单讲,队列长度直接影响着用户的并发量。
名称 | CenterControl20131230 >>>这个直接忽略,程序池的名称。
启用32位应用程序 | True >>>若是系统为64位的,有的时候64位的系统不支持开发中写的一些32位系统标准,因此要设置为True,而支持32位的程序标准。(好比:64位操做系统不支持Microsoft OLE DB Provider for Jet驱动程序,也不支持更早的Microsoft Access Driver (*.mdb)方式链接。)有的时候若是设置为false,若是iis用64位启动的应用程序,而VS用的是32位的,在IIS下就会报错,若是要用32位的dll,就要设置一下。
托管管道模式 | Integrated >>>IIS7.0能够支持两种管道模式:一种是IIS 7.0最新提供的集成管道模式,另外一种是经典管道模式,这种模式是由先前版本的IIS提供的。咱们能够在应用程序池级设置管道模式,这项功能对IIS管理员尤为有用,由于这样既能够令一台服务器仅运行一种模式,也能够令两种模式同时运行于一台服务器上。
自动启动 | True >>> 若是禁用应用程序池的自动启动功能,必须手动启动应用程序池。 当您要在应用程序池启动前对该应用程序池中的应用程序进行配置或内容更改时,禁用自动启动功能颇有用。未启动应用程序池时,对该应用程序池中应用程序的请求将返回 HTTP 503“服务不可用”错误。
CPU:
限制 | 0 >>>为了在5分钟内将CPU限制设置为60%,咱们能够令限制为60 000,同时令限制间隔(分钟)为5。
限制操做 | NoAction | KillW3wp>>>NoAction什么也不作;KillW3wp终止W3wp进程,那么正如选项名称所示,此时咱们要终止CPU超限的应用程序池工做进程,防止服务器的其余部分受到影响,IIS6.0系统将启动一个新的工做进程,而II7.0不启动一个新的工做进程,要本身手动去开启。
回收:
暂时没有时间搜材料了,就写到这里。
问题2解决:
在IIS7.5中有个autoStart属性,能够设置为true。在IIS7.0中,自认为写个模拟http请求的看门狗,固定的时间时间间隔对网页进行访问。
最后推荐书籍:
《IIS7开发与管理彻底参考手册》