详解ASP.NET页面的aspx扩展
2012-04-13 14:57
316 查看
我们通过本文要谈谈ASP.NET页面的aspx扩展,主要是为了网站业务上的扩展,保持两个网站图片内容同步。希望本文能对大家有所帮助。
需求:某网站因业务扩展,需拆分出另一个站点,新旧站点具有相同的内容,但具体栏目表现形式上不一样。原网站运行多年,有大量的图片,这些图片也会在新站上使用。任务是:
保证两个网站图片内容同步,即原来的站点增加一个图片,新站点即可使用这个图片。
分析:假设两个站点的域名分别为:http://www.a_image.com/和http://www.b_image.com/
1、 将图片分别拷到两台服务器,以后上传图片同时上传两台服务器。这种方法虽简单,但是占用巨大的磁盘空间,而且维护麻烦。
2、 在http://www.b_image.com/的页面上直接写http://www.a_image.com/的引用。这种方式类似“图片盗链”,但工作量也很大,每加一个图片都要改链接。日后维护工作也很大。
3、 一台服务器保留图片,另外一台服务器通过IIS的网络共享方式访问图片。但开放文件共享对服务器的安全将构成威胁。
剖析页面运行原理:
)LJ@0_.k+S0当浏览器向IIS请求页面时,IIS会把请求转交给ASP.NET HTTP管道,HTTP管道是一组被控对象(HTPPModel),这些对象按顺序处理请求并把这些请求转换成一般的HTML文本。HTTP管道的入口是HttpRuntime类的实体。HttpRuntime类实体从内存程序池中选择一个HttpApplication对象,HttpApplication的主要工作是寻找这样的类实体(HttpHandler)使之能够处理请求。应用程序能在Web.Config里对这个Http处理句柄映射列表进行重定义。下列Web.config中的句柄,定义了.jpg资源请求的处理句柄:
<httphandlers> <add verb=”*” path=”*.jpg” type=”HandlerTest”/> </httphandlers>
Verb列表可以是逗号分隔的HTTP谓词列表(例如“GET,PUT,POST”),也可以是通配符“*”;path路径属性可以包含单个URL路径或简单的通配符字符串(例如*.aspx);type指定逗号分隔的类/程序集组合。ASP.NET首先在应用程序的专用\bin目录中搜索程序集DLL,然后在系统程序集缓存中搜索程序集DLL。ITPUB个人空间;ks aR&V9j
从代码层面来看,要实现自定义的HTTP处理句柄,只需要实现一个IhttpHandler接口,其中包括IsReusable和ProcessRequest两个方法。IsReusable方法用于返回应用程序池中是否存在可重用的类实体的信息,利用这个方法可以同时为多个请求服务,而ProcessRequest方法则接受一个HttpContext实体作为参数,从而得到对Request和Response的存取权限。
处理思路:当对www.b_image.com/images/book.jpg的请求到达IIS时,ASP.NET初始化一个图像生成器类,在这个类中,通过HTTP端口把www.a_image.com/images/book.jpg取回来,再将图像流返回到HTTP响应中。接收并处理HTTP请求是在ProcessRequest方法中完成的。客户端并不知道实际发生了什么事情。
代码:
using System; using System.Net; using System.IO; using System.Web; using System.Drawing; using System.Drawing.Imaging; namespace WebHttpModule { public class ImageLink : IHttpHandler { public void ProcessRequest(HttpContext context)
{ string url =
context.Request.Url.ToString(); //if request is http://www.b_image.com/, then changed to request http://www.a_image.com/ urlurl = url.Replace("http://www.b_image.com/", "http://www.a_image.com/"); //如果使用的相对路径,就要手工加入完整的url路径 if (url.IndexOf("http://www.a_image.com/")
<= 0) {
url = "http://www.a_image.com/" + url; } //create one WebClient object, used to request the image of http://www.a_image.com/ WebClient
client = new WebClient(); Stream
stream = client.OpenRead(url); Image
image = Image.FromStream(stream);
context.Response.ContentType =
"image/jpeg"; //将图像写入HTTP响应,返回给客户端请求 image.Save(context.Response.OutputStream, ImageFormat.Jpeg); image.Dispose(); } public bool IsReusable { get {
return true; } } } }
配置:
1、 将上面的代码编译为ImageLink.dll,在b服务器建立和a机器相同路径的图片目录images,并在其下建立bin目录,将ImageLink.dll拷进去,在b服务器中吧images目录设定为一个应用程序,这样才能针对此应用程序设定相应的程序映射(添加相应的扩展),以把jpg后缀的请求发送到ASP.NET去处理。
2、 在Web.Config中配置代码来设定httpHandlers,我们现在要做的把对images目录下的jpg文件的请求转到ImageLink来处理,因此最终的设定如下:
<httphandlers>
<add verb=”*”
path=”images/*.jpg” type=” WebHttpModule.ImageLink, ImageLink”/>
</httphandlers>
将web.config拷到images目录下。
需求:某网站因业务扩展,需拆分出另一个站点,新旧站点具有相同的内容,但具体栏目表现形式上不一样。原网站运行多年,有大量的图片,这些图片也会在新站上使用。任务是:
保证两个网站图片内容同步,即原来的站点增加一个图片,新站点即可使用这个图片。
分析:假设两个站点的域名分别为:http://www.a_image.com/和http://www.b_image.com/
1、 将图片分别拷到两台服务器,以后上传图片同时上传两台服务器。这种方法虽简单,但是占用巨大的磁盘空间,而且维护麻烦。
2、 在http://www.b_image.com/的页面上直接写http://www.a_image.com/的引用。这种方式类似“图片盗链”,但工作量也很大,每加一个图片都要改链接。日后维护工作也很大。
3、 一台服务器保留图片,另外一台服务器通过IIS的网络共享方式访问图片。但开放文件共享对服务器的安全将构成威胁。
剖析页面运行原理:
)LJ@0_.k+S0当浏览器向IIS请求页面时,IIS会把请求转交给ASP.NET HTTP管道,HTTP管道是一组被控对象(HTPPModel),这些对象按顺序处理请求并把这些请求转换成一般的HTML文本。HTTP管道的入口是HttpRuntime类的实体。HttpRuntime类实体从内存程序池中选择一个HttpApplication对象,HttpApplication的主要工作是寻找这样的类实体(HttpHandler)使之能够处理请求。应用程序能在Web.Config里对这个Http处理句柄映射列表进行重定义。下列Web.config中的句柄,定义了.jpg资源请求的处理句柄:
<httphandlers> <add verb=”*” path=”*.jpg” type=”HandlerTest”/> </httphandlers>
Verb列表可以是逗号分隔的HTTP谓词列表(例如“GET,PUT,POST”),也可以是通配符“*”;path路径属性可以包含单个URL路径或简单的通配符字符串(例如*.aspx);type指定逗号分隔的类/程序集组合。ASP.NET首先在应用程序的专用\bin目录中搜索程序集DLL,然后在系统程序集缓存中搜索程序集DLL。ITPUB个人空间;ks aR&V9j
从代码层面来看,要实现自定义的HTTP处理句柄,只需要实现一个IhttpHandler接口,其中包括IsReusable和ProcessRequest两个方法。IsReusable方法用于返回应用程序池中是否存在可重用的类实体的信息,利用这个方法可以同时为多个请求服务,而ProcessRequest方法则接受一个HttpContext实体作为参数,从而得到对Request和Response的存取权限。
处理思路:当对www.b_image.com/images/book.jpg的请求到达IIS时,ASP.NET初始化一个图像生成器类,在这个类中,通过HTTP端口把www.a_image.com/images/book.jpg取回来,再将图像流返回到HTTP响应中。接收并处理HTTP请求是在ProcessRequest方法中完成的。客户端并不知道实际发生了什么事情。
代码:
using System; using System.Net; using System.IO; using System.Web; using System.Drawing; using System.Drawing.Imaging; namespace WebHttpModule { public class ImageLink : IHttpHandler { public void ProcessRequest(HttpContext context)
{ string url =
context.Request.Url.ToString(); //if request is http://www.b_image.com/, then changed to request http://www.a_image.com/ urlurl = url.Replace("http://www.b_image.com/", "http://www.a_image.com/"); //如果使用的相对路径,就要手工加入完整的url路径 if (url.IndexOf("http://www.a_image.com/")
<= 0) {
url = "http://www.a_image.com/" + url; } //create one WebClient object, used to request the image of http://www.a_image.com/ WebClient
client = new WebClient(); Stream
stream = client.OpenRead(url); Image
image = Image.FromStream(stream);
context.Response.ContentType =
"image/jpeg"; //将图像写入HTTP响应,返回给客户端请求 image.Save(context.Response.OutputStream, ImageFormat.Jpeg); image.Dispose(); } public bool IsReusable { get {
return true; } } } }
配置:
1、 将上面的代码编译为ImageLink.dll,在b服务器建立和a机器相同路径的图片目录images,并在其下建立bin目录,将ImageLink.dll拷进去,在b服务器中吧images目录设定为一个应用程序,这样才能针对此应用程序设定相应的程序映射(添加相应的扩展),以把jpg后缀的请求发送到ASP.NET去处理。
2、 在Web.Config中配置代码来设定httpHandlers,我们现在要做的把对images目录下的jpg文件的请求转到ImageLink来处理,因此最终的设定如下:
<httphandlers>
<add verb=”*”
path=”images/*.jpg” type=” WebHttpModule.ImageLink, ImageLink”/>
</httphandlers>
将web.config拷到images目录下。
相关文章推荐
- 详解ASP.NET页面的aspx扩展
- 一起谈.NET技术,详解ASP.NET页面的aspx扩展
- 详解ASP.NET页面的aspx扩展
- ASP.NET 页面aspx之扩展
- ASP.NET 页面aspx之扩展
- Asp.Net底层解析(三)——ASPX页面的生命周期详解
- 详解ASP.NET页面的asp“.NET研究”x扩展
- Asp.net 让其他后缀名、扩展名文件像aspx页面一样被解析
- asp.net页面回传与js调用服务端事件、PostBack的原理详解(转)
- ASP.NET刷新页面的几种方法详解
- asp.net 在aspx页面 中包含(引入)HTML文件,include
- HTML控件ID和NAME属性的区别,以及如何在asp.net页面的.CS文件中获得.ASPX页面中HTML控件的值
- 点滴积累【ASP.NET】---定义一个textbox用户控件在ascx页面!在不同的aspx页面调用时动态验证
- ASP.NET页面事件:顺序与回传详解
- IIS WEB服务扩展里没有ASP.NET v2.0导致无法正常浏览.ASPX文件
- ASP.NET页面事件:顺序与回传详解
- asp.net 点击按钮退出当前XXX.aspx页面
- Asp.Net MVC 扩展 Html.ImageFor 方法详解
- ASP.NET中把扩展名.aspx改成自定义的扩展名.mspx,如何在IIS与.net框架中配置
- asp.net web页面自定义分页控件使用详解