资源预览内容
第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
亲,该文档总共8页全部预览完了,如果喜欢就下载吧!
资源描述
HTTP管道技术目标:1. 了解ASP.NET生命周期2. 了解HTTP运行时3. 了解HTTP管道技术4. 掌握HttpHandler和HttpModule一. 了解ASP.NET生命周期多个用户相关处理资源(1)(IIS)WEB服务器(inetinfo.exe)只有少数几种被客户端请求的资源类型由IIS直接处理,如对HTML页面,文本文件,jped和gif图像的传入请求对ASP.NET资源(*.aspx)的请求将传递到ASP.NET ISAPI扩展,该系统组件是一个名为aspnet_isapi.dll的win32DLL(2)aspnet_isapi.dll:可以处理多种资源类型,包括web服务和HTTP处理程序调用(3)ASP.NET 辅助进程 (aspnet_wp.exe)由aspnet_isapi.dll负责调用Aspnet_wp.exe负责控制请求的执行,并可以终止请求t二. 认识)aspnet_isapi.dll三. ISAPI和辅助进程的关系ISAPI和辅助进程之间的通讯时使用一组命名管道进行的命名管道是一种win32机制,用于跨进程边界传输数据.顾名思义,命名管道的工作方式与管道相似:在一端输入数据.另一端输出相同的数据,建立的管道既可以连接本地进程,也可以连接远程计算机上运行的进程,对于本地进程间通讯,管道是windows中最有效,最灵活的工具四. ASP.NET请求的处理逻辑步骤1. 当请求到达时,IIS检查资源类型并调用ASP.NET ISAPI扩展,如果启用了默认的进程模型,ASPNET_ISPI会将请求排队,并将请求分配给辅助进程,所有的请求数据都通过异步I/0发送.2. 收到请求后,ASP.NET辅助进程将通知ASP.NET ISAPI,它将为请求服务(建立管道)3. 在辅助进程的上下文中执行请求.有时,辅助进程可能需要回调ISAPI以完成请求,也就是需要说枚举服务器变量,这种情况下,辅助进程将使用同步管道,因为这样可以保持请求处理逻辑的顺序.4. 完成后,响应被发送到打开了异步管道的aspnet_isapi.如果aspnet_isapi检测到辅助进程已取消,它将自动终止请求并释放所有相关的IIS资源五. ASP.NET运行时环境构成ASP.NET运行时环境的可执行文件Aspnet_filter.dll组件是一个小的win32 ISAPI筛选器,用来备份ASP.NET应用程序的无cookie会话状态Aspnet_state.exe的作用对web应用程序更为重要,因为它用于管理会话状态六. HTTP管道HTTP管道代表的是ASP.NET应用程序的生命周期.在ASP.NET应用程序中,系统使用一组相关的类,通过一定的循序来处理客户端的请求(request),ASP.NET应用程序的处理模式,可称之为HTTP处理管道httpModule和httpHandler就是这个处理管道上的两个处理环节相关类:HttpWorkerRequest抽象类定义了ASP.NET页面处理器尼姑的基本方法HttpRuntime 提供了处理应用的一组服务HttpContenxt保存了处理一次请求的所有相关上下文信息HttpApplicationFactory提供相关目录的应用程序HttpApplication定义了所有ASP.NET应用程序的通用方法,属性和事件.这个类也是在用户在global.sax文件中定义的应用基类Modules处理请求前和响应后的事件HandlerFactories提供应用程序中的HandlersHandlers处理请求和响应七. HttpHandler1 HttpHandler:处理请求(request)的信息和发送响应(Response)2 System.Web.UI.Page类-也实现了HttpHandler的接口3 可以通过HttpHandler拦截请求,执行我们自定义处理程序4 Web.config中节点配置 节点详细说明: verb可以是GET或POST,表示对GET或POST的请求进行处理。*表示对所有请求进行处理,这里是对GET请求进行处理。 path指明对相应的文件进行处理,*.aspx表示对发给所有ASPX页面的请求进行处理,这里单独对redirect.aspx页面进行处理。可以指明路径,如blogs。表明只对blogs目录下的redirect.aspx文件请求进行处理。 type属性中,逗号前的字符串指明HttpHandler的实现类的类名,后面的字符串指明Dll文件的名称。相关应用1.防盗链接public class FileDownHandler : IHttpHandler bool IHttpHandler.IsReusable get return true; public void ProcessRequest(HttpContext context) if (context.Request.UrlReferrer = null) | (context.Request.UrlReferrer.Host = localhost & context.Request.UrlReferrer.Port = 80) context.Response.Expires = 0; context.Response.Clear(); context.Response.ContentType = rar; context.Response.WriteFile(context.Request.PhysicalPath); context.Response.End(); else /如果不是本地引用,则属于盗链引用, HttpResponse response = context.Response; response.Redirect(context.Request.ApplicationPath + /ErrorPage.htm); 2. 给图片打上水印public class CoverHandler:IHttpHandler private const string WaterImage_Url = /Images/WaterMark.jpg; private const string DefaultImage_Url = /Images/default.jpg; bool IHttpHandler.IsReusable get return false; void IHttpHandler.ProcessRequest(HttpContext context) System.Drawing.Image img=null; if (File.Exists(context.Request.PhysicalPath) img = Image.FromFile(context.Request.PhysicalPath); Image waterimage = Image.FromFile(context.Request.MapPath(WaterImage_Url); Graphics g = Graphics.FromImage(img); g.DrawImage(waterimage, new Rectangle(img.Width - waterimage.Width, img.Height - waterimage.Height, waterimage.Width, waterimage.Height), 0, 0, waterimage.Width, waterimage.Height, GraphicsUnit.Pixel); g.Dispose(); waterimage.Dispose(); else img = Image.FromFile(context.Request.MapPath(DefaultImage_Url); context.Response.ContentType = image/jpeg; img.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg); img.Dispose(); context.Response.End(); 添加半透明的水印ImageAttributes attributes = new ImageAttributes(); float alpha = 60 / 255.0f; float colorMatrixElements = new float 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, new float 0.0f, 1.0f, 0.0f, 0.0f, 0.0f,
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号