简述.Net管道通信简介及应用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LYTIT/article/details/88318398

一、.Net管道通信简介:

1)、管道通信结构:
在这里插入图片描述

2)、管道模型
管道模型就使用HttpApplicationFactory对象来创建一个HttpApplication对象来处理这个请求,一个HttpApplication可以包含一系列HTTP module对象。其中最重要的就是HttpModule和HttpHandler:
在这里插入图片描述

二、.Net管道通信实际运用

(一)、IIS5
请求Asp.Net
如果我们请求的是一个基于ASP.NET的资源:
1、加载aspnet_isapi.dll
2、创建工作进程(第一次请求)
3、加载CLR(第一次请求)
4、创建AppDomain(某个web应用的第一次请求)
5、执行ISAPIRuntime.
在这里插入图片描述

说明:
对于IIS 5.x来说,该工作进程为aspnet_wp.exe。
aspnet_isapi.dll与工作进程之间通过命名管道(Named Pipes)进程通信,以获得最好的性能。
对于寄宿于IIS 5.x的所有Web 应用都运行在同一个工作进程的不同AppDomain中。

(二)、IIS6
IIS5不足:
1、aspnet_isapi与进程之间是跨进程通信;
2、所有web应用都是同一个进程;
IIS6解决办法:
1、将aspnet_isapi加载到工作进程。
2、建立应用程序池,一个程序池对应一个工作进程。
另外在IIS6中,创建新的http监听器:HTTP协议栈(HTTP Protocol Stack,HTTP.SYS)
持续监听:由于HTTP.SYS是一个网络驱动程序,始终处于运行状态,对于用户的HTTP请求,能够及时作出反应;
更好的稳定性:HTTP.SYS运行在操作系统内核模式下,并不执行任何用户代码,所以其本身不会受到Web应用、工作进程和IIS进程的影响;
内核模式下数据缓存:如果某个资源被频繁请求,HTTP.SYS会把响应的内容进行缓存,缓存的内容可以直接响应后续的请求。由于这是基于内核模式的缓存,不存在内核模式和用户模式的切换,响应速度将得到极大的改进。
请求Asp.Net
与IIS5.X不同的是:
1.W3SVC服务根据请求创建工作进程
2.aspnet_isapi.dll是在工作进程的初始化过程中被加载。
在这里插入图片描述

说明:
W3SVC服务已经从iis进程中脱离出来。http.sys接受到请求,将直接分发给w3svc服务
在IIS6中工作进程名为w3wp.exe
工作进程的这种创建方式被称为请求式创建

(三)、IIS 7
1)、在IIS6中的W3SVC服务的功能
(1)HTTP请求接收:接收HTTP.SYS监听到的HTTP请求;
(2)配置管理:从元数据库(Metabase)中加载配置信息对相关组件进行配置;
(3)进程管理:创建、回收、监控工作进程。
在IIS7中W3SVC只负责第一个功能,剩余功能交给WAS服务管理
IIS7引入Windows进程激活服务(Windows Process Activation Service,WAS):同时处理HTTP和非HTTP请求。
在WAS中,定义了一个重要的接口:监听器适配器接口(Listener Adapter Interface)抽象出不同协议监听器监听到的请求。
WAS将监听W3SVC服务的http请求以及WCF服务的TCP、Named Pipes、MSMQ3种请求.
在这里插入图片描述

说明
WCF提供的这3种监听器和监听适配器定义在程序集SMHost.exe中,你可以通过下面的目录找到该程序集:%windir%\Microsoft.NET\Framework\v3.0\Windows Communication Foundation。
SMHost.exe提供了4个重要的Windows Service:
(1)NetTcpPortSharing:为WCF提供TCP端口共享,关于端口共享;
(2)NetTcpActivator:为WAS提供基于TCP的激活请求,包含TCP监听器和对应的监听适配器;
(3)NetPipeActivator:为WAS提供基于命名管道的激活请求,包含命名管道监听器和对应的监听适配器;
(4)NetMsmqActivator:为WAS提供基于MSMQ的激活请求,包含MSMQ监听器和对应的监听适配器。

2)、集成模式
传统模式的缺点
(1)相同操作的重复执行:IIS与ASP.NET之间具有一些重复的操作,比如身份验证;
(2)动态文件与静态文件处理的不一致:因为只有基于ASP.NET的动态文件(比如.aspx、.asmx、.svc等等)的HTTP请求才能通过ASP.NET ISAPI进入ASP.NET管道,而对于一些静态文件(比如.html、.xml、.img等)的请求,则由IIS直接响应,那么ASP.NET管道中的一些功能将不能用于这些基于静态文件的请求,比如,我们希望通过Forms认证应用于基于图片文件的请求;
(3)IIS难以扩展:对于IIS的扩展基本上就体现在自定义ISAPI,但是对于大部分人来说,这不是一件容易的事情。因为ISAPI是基于Win32的非托管的API,并非一种面向应用的编程接口。通常我们希望的是诸如定义ASP.NET的HttpModule和HttpHandler一样,通过托管代码的方式来扩展IIS。
如图:
在这里插入图片描述
实际上IIS7集成模式,就是让用户可以通过编写托管代码的module,把托管代码插入到IIS内核代码中来解析,方便大家精确控制任意请求,带来更好的扩展性。
配置文件上的区别
在这里插入图片描述

三、Asp.Net管道

1、加载CLR:在工作进程中,ISAPI负责进行CLR的加载(如果.NET运行时尚未加载).
2、创建AppDomain:当成功加载了运行时后,会通过AppDomainFactory为该Web应用创建一个应用程序域(AppDomain)。
3、执行ISAPIRuntime的int ProcessRequest(IntPtr ecb, int iWRType)方法
4、执行HttpRuntime的PR方法  
在这里插入图片描述
5、获取httpapplication实例,调用httpapplication的pr方法
在这里插入图片描述
6、触发httpapplication各事件

以上是我个人认知所得,不足之处,还望大神,大牛们指教~
参考地址:http://neverc.cnblogs.com/p/4807836.html

猜你喜欢

转载自blog.csdn.net/LYTIT/article/details/88318398
今日推荐