博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一次面试留下的实际应用问题。关于HttpModule,IIS集成模式。
阅读量:4677 次
发布时间:2019-06-09

本文共 2340 字,大约阅读时间需要 7 分钟。

资料来自《IIS7开发与管理完全手册》

周五面试时有点紧张,没能静下心思考,当时隐约想到这个解决方案,但因面试环境和心态确未能明确的表述。

回家的地铁上已经找到解决办法。

要点:1基于IHttpModule,2IIS集成模式。

IHttpModule想必作B/S开发的人不会陌生。

IIS集成模式。是IIS7的新特性。

//图《IIS7开发与管理完全手册》这本书里有,懒得画了,在园子里扒了一个。

可以看到,静态文件是不进入MODULE的

经典模式-可以看到,静态文件是不经过MODULE的

集成模式-不论静态,还是动态的访问,统一在一个管道中。

 

简单但不严谨的表述:IIS6的IHttpModule只对ashx,aspx等动态文件生效,若要拓展html,css此类静态文件的访问,只能通过WINDOWS权限控制,开发人员无法自行定义。IIS7新加入了集成模式,将所有的request统一在一个管道中,并向开发人员开放。

应用场景如下:基于ASP.NET平台MVC架构的网站,默认Index.html为首页,每小时根据最新数据,重建该页面,而此时会影响对该页面的访问,个人未处理过此种场景,理解上重建文件时文件会加锁,B端访问该文件或许会报文件正操作之类的错误。(如理解错误请指出)

 

操作流程

1文件根路径定义两个文件 index.html,index2.html

2移除黙认的路由RouteConfig(移除后,对网站根路径的访问会因此定义到Index.html)

 

public class RouteConfig    {        public static void RegisterRoutes(RouteCollection routes)        {            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");        }    }

3建立自定义MODULE

public class TestMoudle:IHttpModule    {        public void Dispose()        {            //throw new NotImplementedException();        }        public void Init(HttpApplication context)        {          //  throw new NotImplementedException();            context.BeginRequest += context_BeginRequest;        }        void context_BeginRequest(object sender, EventArgs e)        {            HttpContext ctx = HttpContext.Current;            string hostname = ctx.Request.UserHostName;            string requesturl = ctx.Request.RawUrl;            //主页放两个文件,index.html index2.html            //在Application["Creating"]设置标志位  Application微软应有同步处理方案,若不放心,自已定一个。            //每小时置Creating为true,重生成Index.html,Index.html生成成功后,置Creating为false 重写index2.html                       //访问路径若为/或index.html            if (requesturl == "/" || requesturl=="/index.html")            {                //若正在生成,在定向到index2.html                //var creating=(bool)ctx.Application["creating"];                bool creating = DateTime.Now.Second % 2==0;                if (creating)                {                    ctx.RewritePath("index2.html");                }            }        }    }
View Code

 

4WEB.CONFIG system.web添加模块配置。

5发布网站到IIS(IIS7以上)

   IIS7的设置部分

6添加一项集成模式的应用程序池

7设置发布网站的应用程序池为定义的集成模式(本例为.Net v4.5)

8进入模块配置(只在WEB.CONFIG配置并不生效),添加自定义的模块

9添加模块成功后,重启该站点,访问即可见效果。

 

PS:因为所有的访问都要经过一个新的MODULE,所以会有部分的性能损耗。

对网站根及index.html的访问,会根据时间(模拟index.html是否正在被重建)定向到index2.html。

 

 

 

 

 

转载于:https://www.cnblogs.com/zihunqingxin/p/3602500.html

你可能感兴趣的文章
intelil——快捷键
查看>>
Java 面向对象 之 final 关键字
查看>>
Contact Form 7邮件发送失败的解决办法
查看>>
How to use For loop in CruiseControl.net
查看>>
P1800 software_NOI导刊2010提高(06)
查看>>
Python学习日记(1)使用if __name__ == "main"
查看>>
二进制的最大公约数
查看>>
彻底弄懂 RTL级,行为级的区别
查看>>
关于PHP开发的9条建议
查看>>
jackson的自动检测机制
查看>>
2019 计蒜之道 初赛 第二场 B. 百度AI小课堂-上升子序列(简单) ( 实现)
查看>>
Python(2.7)-随机函数(random)
查看>>
Mybatis学习笔记(一) 之框架原理
查看>>
ABSTRACT的方法是否可同时是STATIC,是否可同时是NATIVE,是否可同时是SYNCHRONIZED?
查看>>
【SPL标准库专题(10)】SPL Exceptions
查看>>
《Python从入门基础到实践》
查看>>
【读入优化】
查看>>
python-网络编程urllib模块
查看>>
0029 Java学习笔记-面向对象-枚举类
查看>>
CGRectGet *** 获取控件坐标的方法
查看>>