设为首页 收藏本站
查看: 1229|回复: 0

[经验分享] 一次面试留下的实际应用问题。关于HttpModule,IIS集成模式。

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-8-13 07:28:36 | 显示全部楼层 |阅读模式
  资料来自《IIS7开发与管理完全手册》
  周五面试时有点紧张,没能静下心思考,当时隐约想到这个解决方案,但因面试环境和心态确未能明确的表述。
  回家的地铁上已经找到解决办法。
  要点:1基于IHttpModule,2IIS集成模式。
  IHttpModule想必作B/S开发的人不会陌生。
  IIS集成模式。是IIS7的新特性。
  //图《IIS7开发与管理完全手册》这本书里有,懒得画了,在园子里扒了一个。
DSC0000.jpg
  经典模式-可以看到,静态文件是不经过MODULE的
DSC0001.jpg
  集成模式-不论静态,还是动态的访问,统一在一个管道中。
  
  简单但不严谨的表述: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


DSC0002.gif DSC0003.gif


  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添加模块配置。



<httpModules>
<add name="TestModule" type="Index.Controllers.TestMoudle,Index"></add>
</httpModules>
  5发布网站到IIS(IIS7以上)
  IIS7的设置部分
  6添加一项集成模式的应用程序池 DSC0004.gif
  7设置发布网站的应用程序池为定义的集成模式(本例为.Net v4.5)
DSC0005.gif
  8进入模块配置(只在WEB.CONFIG配置并不生效),添加自定义的模块
DSC0006.gif
DSC0007.gif
  9添加模块成功后,重启该站点,访问即可见效果。
  
  PS:因为所有的访问都要经过一个新的MODULE,所以会有部分的性能损耗。
  对网站根及index.html的访问,会根据时间(模拟index.html是否正在被重建)定向到index2.html。
  
  
  
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-98142-1-1.html 上篇帖子: [老问题]用户 'IIS APPPOOL\DefaultAppPool' 登录失败。 下篇帖子: IIS 之 无法找到该页,服务器应用程序不可用 解决办法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表