我们通过本文要谈谈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的网络共享方式访问图片。但开放文件共享对服务器的安全将构成威胁。

剖析页面运行原理:
当浏览器向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。
从代码层面来看,要实现自定义的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目录下。

到此大工就告成了!所有对b服务器请求的jpg图片都会从a机器取到,在客户端却看不出来。

原文标题:ASP.NET 页面aspx之扩展

链接:http://www.cnblogs.com/JeffreyZhao/archive/2009/10/14/aspnet-routing-design-ideas-and-patterns.html

详解ASP.NET页面的aspx扩展相关推荐

  1. 在asp.net页面的aspx文件中插入代码段

    1.插入函数代码段<script runat="server"> 这种方式插入的代码段跟.cs文件中的代码是一致的,在做相应的action时被触发调用. 用于声明ASP ...

  2. 详解asp.net邮件收发系统

    详解asp.net邮件收发系统 通过邮件客户端,不需要登录邮箱网站我们就能直接收发邮件. 1 系统分析 邮件收发是各个网站几乎必备的功能,在用户注册.邮箱确认.邮箱客服.找回密码等环节有典型应用.但是 ...

  3. C#-Home / 详解Asp.Net Sql数据库连接字符串

    C#-Home / 详解Asp.Net Sql数据库连接字符串 2010-04-18 22:00 281人阅读 评论(0) 收藏 举报 1.连接数据库文件 <add name="Loc ...

  4. 绿建科技加密图纸查看器安装_施工图看不懂?1.1G工程施工图纸详解,253页图文合集一查就清楚...

    施工图看不懂?1.1G工程施工图纸详解,253页图文合集一查就清楚 只要是对建筑行业,有所了解的朋友都清楚,钢筋施工图纸对于建筑物,有着举足轻重的地位!一点都不得马虎大意,接触建筑行业,第一步还是需 ...

  5. 2022.12四级真题第3套答案及详解(共9页pdf)

    2022.12四级真题第3套答案及详解(共9页pdf) 内容对于23年考四级的同学很有帮助 2022年12月四级考试全国共考了2套听力,本套真题 听力与前2套内容完全相同,只是顺序不同,故听力题不再重 ...

  6. [深入学习C#]LINQ查询表达式详解(1)——基本语法、使用扩展方法和Lambda表达式简化LINQ查询

    此文章非原创,转载自诗人江湖老,原文地址 在Git上下载源码 在工程中我们少不了要定义类或者结构去储存数据,这些数据将被临时地储存在内存中,现在我们想要对其完成一些类似于查找.过滤等等常见的任务的时候 ...

  7. 怎么修改服务器上的cpt文件,DELL-服务器-RAID-配置详解(28页)-原创力文档

    DELL 服务器 RAID 配置详解 磁盘阵列可以在安装系统之前或之后产生,系统会视之为一个(大型)硬盘,而它具有容 错及冗余的功能.磁盘阵列不单只可以加入一个现成的系统,它更可以支持容量扩展,方 法 ...

  8. 详解ASP.NET页面生命周期事件

    下面是ASP.NET页面初始的过程: 1. Page_Init(); 2. Load ViewState; 3. Load Postback data; 4. Page_Load(); 5. Hand ...

  9. cookie 操作详解 (asp.net javascript)

    (1)ASP.NET cookie 操作详解|cookie 写入.读取.修改.删除2008年10月18日     //写入     protected void Button2_Click(objec ...

最新文章

  1. 法猿生存计划--左边的管理,技术正确
  2. IIS 7 应用程序池自动回收关闭的解决方案
  3. 腾讯十周年,看看你的QQ是什么时候注册的?
  4. Spring事务传递性探讨
  5. jsp模糊查询_查询知识产权和商标专利的网站汇总!
  6. shell-grep命令详解(转)
  7. 如何绘制逻辑图 — 2.要素的属性
  8. 根据两点之间的连线,计算连线到各坐标轴之间的夹角(角度,弧度)
  9. LED流水灯程序——小白的单片机笔记
  10. 自动控制原理学习笔记(五)
  11. javac编译带有package的java文件
  12. 51单片机(流水灯)
  13. 001Diamond学习001概述
  14. 交叉编译 foo2zjs
  15. 2021年的EI会议论文发表难度评价
  16. 基于JAVA springboot + MYSQL +VUE的项目管理系统(含数据库),包括工时统计、原型预览、效果图管理等
  17. android图片压缩的两个开源库
  18. Welearn的cookie值怎么获取?
  19. Java黑皮书课后题第5章:5.3(将千克转换成磅)编写程序,显示下面的表格(注意:1kg为2.2磅)
  20. [arch Linux] 使用grub实现Linux和Windows双系统的引导

热门文章

  1. 经典C语言程序100例之十五
  2. 怎么把图片上的字盖住_吃完大闸蟹怎么去腥?实验了 12 种方法,第 1 名居然是.........
  3. 11_模型的选择与调优,交叉验证,超参数搜索-网格搜索sklearn.model_selection.GridSearchCV
  4. 查看当前服务器中的所有的topic,创建topic,删除topic,通过shell命令发送消息,通过shell消费消息,查看topic详情,对分区数进行修改
  5. Oracl数据库管理方面的资料(查询sga,查看oracle数据库名称sid,查看oracle数据库名称,查看表空间,修改表空间名称,数据库管理,sqlPlus数据显示)
  6. xml解析:Sax,Dom,pull解析
  7. linux搭建交换机日志,用LINUX的SYSLOG做交换机、路由器的日志服务器
  8. 如何查询oracle死锁,Oracle死锁查看和解决办法汇总
  9. 如何使用Soft-NMS实现目标检测并提升准确率
  10. CentOS 5.5下LVM的分区管理