iis7.5伪静态配置 应用程序池 经典模式和集成模式的区别

网络改变时代,我们改变网络
欢迎您的到来,我们将竭诚为您服务
年网络时代发展历程
网络时代十五年荣获的资质荣誉一览
网络时代员工生日聚会及活动照片
各大媒体对网络时代管理层采访
我们求才若渴,深知人才的宝贵
我们将为您提供五星级服务
怎么样做好外贸网站?
外贸网站要怎么建设?
·多线接入&& ·反垃圾反病毒
·邮件监控&& ·海外手法
·邮件传真&& ·超大附件
·安全加密&& ·发送状态查询
·稳定安全&& ·海外自动转发入
从服务器购买到托管全流程讲解服务器托管知识
网络时代针对各行业做出的行业解决方案,让您在行走之中走的更远
IIS7.5应用程序池集成模式和经典模式的区别介绍
这次就主要介绍下httpHandler 和 httpModule 在集成和经典模式下的区别。很多文件上传等都是需要使用到httpModule去实现。今天就出现了NeatUpload在iis7.5下出现未将对象引用到设计实例的错误。所以用httpModule作为测试案例。
1.新建测试网站WebApplication,加入MyHttpModule类实现IHttpModule接口,主要目的是测试程序是否经过了HttpModule,经过的在页面输出HttpModule字符。
代码如下: public class MyHttpModule : IHttpModule { public void Dispose() { } public void Init(HttpApplication context) { context.BeginRequest += context_BeginR } protected void context_BeginRequest(object sender, EventArgs e) { var context = sender as HttpA context.Response.Clear(); context.Response.Write("HttpModule"); context.Response.End(); } }
2.在IIS7.5部署网站,首先使用经典模式应用程序池。在web.config的 的子节点 加入 代码如下:
访问网站可以发现页面输出如下,说明程序经过了HttpModule
直接切换应用程序池成集成模式会发现页面输出为空。证明程序没有经过HttpModule。那在集成模式下HttpModule如何才能执行呢? 之前部署这样就大概明白意思是iis7.0之后有部分web配置移动到system.webServer中。查阅相关得到答案确实如此 详细资料见
于是在 中加入配置如下,刷新页面,页面能够输出字符HttpModule,证明成功了。 代码如下:
由于在升级过程成有一个站点出现 HTTP 错误 500.22 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.NET 设置
当时在比较急的情况下就直接删除了 的子节点 程序正常运行。后面通过仔细和正常的站点对比是发现是缺少 这个导致,这个主要作用是设置不检测 中的配置
相信大家对iis7.5上的部署有了一定了解了。
此答案有用吗?
(查看: 332)
(查看: 150)
(查看: 435)
(查看: 245)
(查看: 170)
旗下网站:&|&
&|&&|&&|&&|&
按3(售后咨询)
增值电信业务经营许可证:
无数荣誉信心保证国际认可优质服务网页设计教程与开发
提供各种常见网页效果
提供各种各样的设计教程
装扮QQ,让QQ变得更酷
设计参考,提高自升水平
学习服务器和操作系统
提供各种素材和工具
收藏学习资料
您现在的位置:&&>>&&>>&&>>&正文
IIS7.5应用程序池集成模式和经典模式的区别介绍
升级过程中出现了比较多的问题,前面文章也提到过几个。这次就主要介绍下httpHandler 和 httpModule 在集成和经典模式下的区别。很多文件上传等都是需要使用到httpModule去实现。我今天就出现了NeatUpload在iis7.5下出现未将对象引用到设计实例的错误。所以用httpModule作为测试案例。 1.新建测试网站WebApplication,加入MyHttpModule类实现IHttpModule接口,主要目的是测试程序是否经过了HttpModule,经过的在页面输出HttpModule字符。 . 代码如下: public class MyHttpModule : IHttpModule { public void Dispose() { } public void Init(HttpApplication context) { context.BeginRequest += context_BeginR } protected void context_BeginRequest(object sender, EventArgs e) { var context = sender as HttpA context.Response.Clear(); context.Response.Write("HttpModule"); context.Response.End(); } }
2、2.在IIS7.5部署网站,首先使用经典模式应用程序池。在web.config的 &system.web& 的子节点&httpModules& 加入&add name="MyHttpModule" type="WebApplication.MyHttpModule, WebApplication"/& . 代码如下: &httpHandlers& &remove verb="*" path="*.asmx"/& &add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF"/& &add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF"/& &add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF" validate="false"/& &/httpHandlers& &httpModules& &add name="MyHttpModule" type="WebApplication.MyHttpModule, WebApplication"/& &add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF"/& &/httpModules& 访问网站可以发现页面输出如下,说明程序经过了HttpModule
直接切换应用程序池成集成模式会发现页面输出为空。证明程序没有经过HttpModule。那在集成模式下HttpModule如何才能执行呢? 之前部署URLRewriter的时候查资料只知道需要 &system.webServer& &modules&注册HttpModule。仔细查看配置文件会发现有一段如下英文.意思大概就是iis7版本的设置。之前版本无需设置。&!-- The system.webServer section is required for running ASP.NET AJAX under Internet Information Services 7.0. It is not necessary for previous version of IIS. --& 这样就大概明白意思是iis7.0之后有部分web配置移动到system.webServer中。查阅相关得到答案确实如此 详细资料见 /buaaboyi/archive//1939903.html 于是在&system.webServer& &modules&中加入配置如下,刷新页面,页面能够输出字符HttpModule,证明成功了。 . 代码如下: &system.webServer& &validation validateIntegratedModeConfiguration="false"/& &modules& &remove name="ScriptModule" /& &add name="MyHttpModule" type="WebApplication.MyHttpModule, WebApplication"/& &add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF"/& &/modules&
由于在升级过程成有一个站点出现 HTTP 错误 500.22 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.NET 设置
当时在比较急的情况下就直接删除了 &system.web& 的子节点&httpModules& 程序正常运行。后面通过仔细和正常的站点对比是发现是缺少 &validation validateIntegratedModeConfiguration="false"/& 这个导致,这个主要作用是设置不检测 &system.web&中的配置 经过这今天的折腾终于是对iis7.5上的部署有了一定了解了。
转载请注明:破洛洛(谢谢合作)
上一篇文章: 下一篇文章:
网友评论:应用程序池可以对相似或相关的应用程序分组,简化配置和管理。同样地,被分配到不同应用程序池的应用程序相互独立,这样,某个应用程序池中的问题不会影响到其他应用程序池中的应用。
&&&&&& 没有把应用程序分配到应用程序池的硬性或快速规则。你可以因为它们具有相似的性能指标、或同属一个部门、或其他任何对环境有意义的原因而进行分组。其中,最有用的功能是让不同的应用程序池使用不同版本的 .NET Framework。
&&&&&& IIS 7 自动创建几个应用程序池,通过 IIS 管理器可以查看并管理应用程序池:
名称:应用程序池创建后就不能再修改。状态:显示应用程序池是否在运行,即该应用程序池中的应用程序的请求是否被响应。托管管道模式:IIS 7 支持集成和经典两种模式。标识:运行应用程序池中应用程序的 Windows 帐号应用程序:分配到应用程序池中的应用程序数量。
&原文:/SkySoot/archive//2995845.html
1. 创建新应用程序池
&&&&&& 通过 IIS 管理器右侧的“添加应用程序池”创建自定义的应用程序池,可输入名称,选择模式(经典模式是为了兼容旧应用程序)。
2. 把应用程序分配到应用程序池&&&&&&
&&&&&& 在 IIS 管理器中选择应用程序,单击右侧“操作”里的“基本设置”,可选择该应用程序被分配的应用程序池:
3. 启动和停止应用程序池
&&&&&& 启动和停止对应了应用程序的请求是否被响应。“回收”操作重置应用程序池,对于处理那些逐步产生的难于诊断的问题非常有用。
4. 并行执行
&&&&&& 应用程序池可以让你在同一台服务器上运行不同版本的 ASP.NET 应用程序。如果要修改使用 VS 项目创建的网站的 .NET 版本,需要修改项目的设置并重新部署,否则会在请求网站时看到配置错误。
使用应用程序预热
&&&&&& 处理第一次请求并返回到浏览器会花费较长时间,但后续的请求就快多了。这是因为 IIS 7 对你部署的文件不做任何处理,直到第一次请求发生为止。此时,IIS 准备应用程序;网站的代码部分被编译;数据库连接被创建;数据被加载等。这会花不少时间,也正因此第一次请求是如此之慢。如果重新启动 IIS,这个过程会再次执行。
&&&&&& 对于大型和复杂的应用程序,响应初始请求所需的时间可能非常长。应用程序预热功能是 IIS 7.5 开始新增的。对于每个配置使用预热功能的应用程序,IIS 7 在启动时执行了一组请求(由你指定),即真正用户的第一次请求到达时,所有准备工作早已经就绪了。
&&&&&& (即使不准备使用应用程序预热,也可以使用
aspnet_compiler.exe 命令行工具执行预编译以提升应用程序的初始性能)
1. 准备 IIS 7
&&&&&& 使用 WebPI 平台再次下载“用于 IIS 7.5 的应用程序预热”,安装完成后刷新或重启 IIS 管理器。
2. 配置应用程序预热
&&&&&& 双击新安装的“应用程序预热”新图标,对话框进行简单的设置即可。
扩展集成管道
&&&&&& IIS 7 支持两种处理请求的模型。第一种是称作“经典”,它是之前版本支持的模型,现在出于兼容旧应用程序的需要仍被支持。第二种成为“集成”,它提供更好的性能以及一个通过 IHttpHandler 接口扩展 IIS 7 的不同模型。默认应该使用集成管道模式。
1. 创建处理程序
&&&&&& 新建类库项目 SimpleHandler,添加下面这个类,实现 IHttpHandler 接口,并生成 DLL 文件:
using System.W
namespace SimpleHandler
class SimpleHandler : IHttpHandler
#region IHttpHandler 成员
public bool IsReusable
get { return true; }
public void ProcessRequest(HttpContext context)
HttpResponse response = context.R
response.Write(&&html&&body&&h1&Rendered by the SimpleHandler&);
response.Write(&&/h1&&/body&&/html&&);
#endregion
2. 部署应用程序
&&&&&& 将此 DLL 文件复制到服务器,放到应用程序根的 bin 目录里。如果 bin 目录不存在,则创建它。我们以系列文章之前部署的 FileCopy 应用程序为例:
3. 配置处理程序
&&&&&& 使用 IIS 管理器,选择要修改的应用程序(此处是 FileCopy 应用程序),双击“处理程序映射”图标打开“处理程序映射”界面:
&&&&&& 单击窗口右侧的“添加托管处理程序”打开对话框。我们希望我们的处理程序只用于以 .htest 结尾的请求;类型处输入类的名称,如果类有命名空间,必须同时包括命名空间;名称字段中输入处理程序摘要页面中可识别的名称;请求限制还能配置一些特别的 选项,现在不需要,单击确定。
&&&&&& 现在看到,主界面已经出现了我们配置的管道程序:
4. 测试处理程序
&&&&&& 我们请求一个以 .htest 结尾,且由 FileCopy 应用程序提供服务的 URL,可以看见如下的效果了:
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:149416次
积分:2889
积分:2889
排名:第4896名
原创:110篇
转载:194篇
评论:25条
(1)(5)(12)(3)(5)(1)(6)(11)(45)(72)(7)(6)(3)(3)(1)(1)(2)(12)(10)(8)(3)(2)(2)(1)(14)(1)(1)(2)(3)(3)(2)(1)(2)(1)(1)(2)(1)(8)(8)(2)(15)(1)(2)(1)(1)(9)(7)(1)1121人阅读
环境: Windows Server 2008 R2, IIS7.5,PHP,mysql
过一段时间后,IIS7.5中的某个网站不能访问,查看相关应用程序池已经停止,再查看相关系统日志,发现一个警告日志,信息如下:
日志名称:& && && & System
来源:& && && && &Microsoft-Windows-WAS
日期:& && && && & 10:28:50
事件 ID:& && && &5009
任务类别:& && && & 无
级别:& && && && &警告
关键字:& && && &&&经典
用户:& && && && &暂缺
计算机:& && && &&&WIN-it0527
为应用程序池“”提供服务的进程意外终止。进程
ID 是“4420”。进程退出代码是“0xff”。
&Event xmlns=&&&
&&&System&
& & &Provider Name=&Microsoft-Windows-WAS& Guid=&{524B5D04-133C-4A62-EDB9CE40}& EventSourceName=&WAS& /&
& & &EventID Qualifiers=&3&/EventID&
& & &Version&0&/Version&
& & &Level&3&/Level&
& & &Task&0&/Task&
& & &Opcode&0&/Opcode&
& & &Keywords&0x00&/Keywords&
& & &TimeCreated SystemTime=&T02:28:50.Z& /&
& & &EventRecordID&68377&/EventRecordID&
& & &Correlation /&
& & &Execution ProcessID=&0& ThreadID=&0& /&
& & &Channel&System&/Channel&
& & &Computer&WIN-it0527&/Computer&
& & &Security /&
&&&/System&
&&&EventData&
& & &Data Name=&AppPoolID&&&/Data&
& & &Data Name=&ProcessID&&4420&/Data&
& & &Data Name=&ExitCode&&ff&/Data&
&&&/EventData&
说明:Windows Process Activation Service (WAS)&
解决思路及方法:
一、检查自己的code
分析原因,查看自己的代码是否有死循环;是否使用了非托管的代码,而没有释放资源(例如引用c/c++ DLL);是否程序中没有正常的捕获处理异常等。还是好好检查自己的代码吧。
二、网上很多解决方法,说是连接数超过限制,新系统且本地测试用,所以不存在iis线程过高,找到一个方法奏效,给NETWORK SERVICE 加上访问iis服务的权限,具体方法如下:
点击“开始”-“控制面板”-“管理工具”-“组件服务”-“计算机”-“我的电脑”-“DCOM”选项,&
选择其下的“IIS
ADMIN SERVICE”,右健选择“属性”,找到“安全”,在“启动和激活权限”中编辑“自定义”,添加帐号“NETWORK
SERVICE&”,&
给该帐号赋予“本地启动”和“本地激活”的权限,重新启动IIS
(“开始”-“运行”-“CMD”,点确定,然后运行IISRESET),&
之后再访问同一站点,则一切正常。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:293839次
积分:4305
积分:4305
排名:第2600名
原创:107篇
转载:221篇
评论:84条
(1)(1)(6)(2)(1)(3)(1)(2)(3)(1)(8)(5)(4)(1)(1)(4)(10)(14)(14)(29)(10)(3)(1)(9)(11)(11)(4)(5)(19)(2)(3)(2)(2)(2)(2)(2)(1)(2)(1)(1)(1)(1)(1)(1)(4)(4)(1)(3)(3)(1)(1)(1)(2)(4)(9)(9)(3)(3)(3)(20)(7)(44)(1)IIS7 应用程序池的 托管管道模式与集成模式小结_.NET教程_编程技术
您的位置: &
& IIS7 应用程序池的 托管管道模式与集成模式小结
这些 ASP.NET 模块不只能处理 ASP.NET 网页程序,也能处理其他如 ASP 程序、PHP 程序或静态 HTML 网页,也因为 ASP.NET 的诸多功能已经成为 IIS 7 的一部份,因此 ASP 程序、PHP 程序或静态 HTML 网页等类型的要求,也能使用像是Forms认证(Forms Authentication)或输出缓存(Output Cache)等 ASP.NET 2.0 的功能(但须修改 IIS 7 的设定值)。也因为 IIS 7 允许自行以 ASP.NET API 开发并加入模块,因此 ASP.NET 网页开发人员将更容易扩充 IIS 7 和网站应用程序的功能,甚至能自行以 .NET 编写管理 IIS 7 的程序(例如以程控 IIS 7 以建置网站或虚拟目录)
IIS 7 的执行架构图(集成托管信道模式下的架构) 小结 IIS5 到 IIS6 的改进,主要是 HTTP.sys 的改进。 IIS6 到 IIS7 的改进,主要是 ISAPI 的改进。
( 01:29:00)
( 13:11:03)
( 13:11:01)
( 16:39:23)
( 10:25:25)
( 18:30:00)
相关排行总榜

我要回帖

更多关于 iis7.5伪静态配置 的文章

 

随机推荐