Global.asax中Application_Start的使用

问题描述:

    在利用asp.net + c# + IIS开发网站的时候,在Global.asax中开启了一个监听socket线程,用来收发数据,在运行的过程中发现,线程运行一段时间之后便会停止,然后在IIS中浏览一下部署的网站,程序又自动运行。此刻内心变开始困惑到底是什么原因导致这个过程。

困惑问题:

    1线程无故停止,浏览网页后程序又运行。

    2在部署网站成功后,线程不运行。浏览网页后线程运行。

问题1原因:

    IIS7.0部署的时候,程序池的高级设置中:回收-固定时间间隔设置为0;进程模型-闲置超时(分钟)设置为0;

    网站是部署在IIS上的,IIS在把网站绑定到【应用程序池】的时候,【应用程序池】有一个默认设置,可以右击【应用程序池】->【高级设置】看到下图所示:

Global.asax中Application_Start的使用_第1张图片

    高级设置中有六个大项为:常规、CPU、回收、进程孤立、进程模型、快速故障防护。

    既然看到了,不妨了解一下几项的功能,我们不能只是知其然,不知所以然。下面我们开个小差,分析一下这个六个功能都是用来干什么的。

常规功能:

Global.asax中Application_Start的使用_第2张图片

    .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:

Global.asax中Application_Start的使用_第3张图片

    限制 | 0 >>>为了在5分钟内将CPU限制设置为60%,我们可以令限制为60 000,同时令限制间隔(分钟)为5。

    限制操作 | NoAction | KillW3wp>>>NoAction什么也不做;KillW3wp终止W3wp进程,那么正如选项名称所示,此时我们要终止CPU超限的应用程序池工作进程,防止服务器的其他部分受到影响,IIS6.0系统将启动一个新的工作进程,而II7.0不启动一个新的工作进程,要自己手动去开启。

回收:

Global.asax中Application_Start的使用_第4张图片


    暂时没有时间搜材料了,就写到这里。

问题2解决:

    在IIS7.5中有个autoStart属性,可以设置为true。在IIS7.0中,自认为写个模拟http请求的看门狗,固定的时间时间间隔对网页进行访问。

最后推荐书籍:

《IIS7开发与管理完全参考手册》

你可能感兴趣的:(Global.asax中Application_Start的使用)