|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
听03很多师兄说主讲老师杭城方讲课很差就连旁听也没有去了)<p>我们经由过程本文要谈谈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.NETHTTP管道,HTTP管道是一组被控工具(HTPPModel),这些工具按按次处置哀求并把这些哀求转换成一样平常的HTML文本。HTTP管道的出口是HttpRuntime类的实体。HttpRuntime类实体从内存程序池当选择一个HttpApplication工具,HttpApplication的次要事情是寻觅如许的类实体(HttpHandler)使之可以处置哀求。使用程序能在Web.Config里对这个Http处置句柄映照列表举行重界说。以下Web.config中的句柄,界说了.jpg资本哀求的处置句柄:
<OLclass=dp-c><httphandlers><addverb=”*”path=”*.jpg”type=”HandlerTest”/></httphandlers>
Verb列表能够是逗号分开的HTTP谓词列表(比方“GET,PUT,POST”),也能够是通配符“*”;path路径属性能够包括单个URL路径或复杂的通配符字符串(比方*.aspx);type指定逗号分开的类/程序集组合。ASP.NET起首在使用程序的公用in目次中搜刮程序集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办法中完成的。客户端其实不晓得实践产生了甚么事变。
代码:
<divclass="code"><OLclass=dp-xml>usingSystem;usingSystem.Net;usingSystem.IO;usingSystem.Web;usingSystem.Drawing;usingSystem.Drawing.Imaging;namespaceWebHttpModule{publicclassImageLink:IHttpHandler{publicvoidProcessRequest(HttpContextcontext){stringurl=context.Request.Url.ToString();//ifrequestishttp://www.b_image.com/,thenchangedtorequesthttp://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;}//createoneWebClientobject,usedtorequesttheimageofhttp://www.a_image.com/WebClientclient=newWebClient();Streamstream=client.OpenRead(url);Imageimage=Image.FromStream(stream);context.Response.ContentType="image/jpeg";//将图象写进HTTP呼应,前往给客户端哀求image.Save(context.Response.OutputStream,ImageFormat.Jpeg);image.Dispose();}publicboolIsReusable{get{returntrue;&n中间码是基于一个虚拟机器。源代码是最高层的,理论上从源代码开始直接编译成本地码能提供最大优化的。而中间码只能是转译成本地码,效率上难免受到损耗。根据虚拟机器所设定的体系结构的特点,和本地机器的差异的多少。 |
|