日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

详解ASP.NET页面的aspx扩展

發(fā)布時(shí)間:2024/9/20 asp.net 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 详解ASP.NET页面的aspx扩展 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我們通過(guò)本文要談?wù)凙SP.NET頁(yè)面的aspx擴(kuò)展,主要是為了網(wǎng)站業(yè)務(wù)上的擴(kuò)展,保持兩個(gè)網(wǎng)站圖片內(nèi)容同步。希望本文能對(duì)大家有所幫助。

需求:某網(wǎng)站因業(yè)務(wù)擴(kuò)展,需拆分出另一個(gè)站點(diǎn),新舊站點(diǎn)具有相同的內(nèi)容,但具體欄目表現(xiàn)形式上不一樣。原網(wǎng)站運(yùn)行多年,有大量的圖片,這些圖片也會(huì)在新站上使用。任務(wù)是:

保證兩個(gè)網(wǎng)站圖片內(nèi)容同步,即原來(lái)的站點(diǎn)增加一個(gè)圖片,新站點(diǎn)即可使用這個(gè)圖片。

分析:假設(shè)兩個(gè)站點(diǎn)的域名分別為:http://www.a_image.com/和http://www.b_image.com/

1、 將圖片分別拷到兩臺(tái)服務(wù)器,以后上傳圖片同時(shí)上傳兩臺(tái)服務(wù)器。這種方法雖簡(jiǎn)單,但是占用巨大的磁盤空間,而且維護(hù)麻煩。

2、 在http://www.b_image.com/的頁(yè)面上直接寫http://www.a_image.com/的引用。這種方式類似“圖片盜鏈”,但工作量也很大,每加一個(gè)圖片都要改鏈接。日后維護(hù)工作也很大。

3、 一臺(tái)服務(wù)器保留圖片,另外一臺(tái)服務(wù)器通過(guò)IIS的網(wǎng)絡(luò)共享方式訪問(wèn)圖片。但開放文件共享對(duì)服務(wù)器的安全將構(gòu)成威脅。

剖析頁(yè)面運(yùn)行原理:
當(dāng)瀏覽器向IIS請(qǐng)求頁(yè)面時(shí),IIS會(huì)把請(qǐng)求轉(zhuǎn)交給ASP.NET HTTP管道,HTTP管道是一組被控對(duì)象(HTPPModel),這些對(duì)象按順序處理請(qǐng)求并把這些請(qǐng)求轉(zhuǎn)換成一般的HTML文本。HTTP管道的入口是HttpRuntime類的實(shí)體。HttpRuntime類實(shí)體從內(nèi)存程序池中選擇一個(gè)HttpApplication對(duì)象,HttpApplication的主要工作是尋找這樣的類實(shí)體(HttpHandler)使之能夠處理請(qǐng)求。應(yīng)用程序能在Web.Config里對(duì)這個(gè)Http處理句柄映射列表進(jìn)行重定義。下列Web.config中的句柄,定義了.jpg資源請(qǐng)求的處理句柄:

<httphandlers> ?<add?verb=”*”?path=”*.jpg”?type=”HandlerTest”/> ?</httphandlers>?

Verb列表可以是逗號(hào)分隔的HTTP謂詞列表(例如“GET,PUT,POST”),也可以是通配符“*”;path路徑屬性可以包含單個(gè)URL路徑或簡(jiǎn)單的通配符字符串(例如*.aspx);type指定逗號(hào)分隔的類/程序集組合。ASP.NET首先在應(yīng)用程序的專用\bin目錄中搜索程序集DLL,然后在系統(tǒng)程序集緩存中搜索程序集DLL。
從代碼層面來(lái)看,要實(shí)現(xiàn)自定義的HTTP處理句柄,只需要實(shí)現(xiàn)一個(gè)IhttpHandler接口,其中包括IsReusable和ProcessRequest兩個(gè)方法。IsReusable方法用于返回應(yīng)用程序池中是否存在可重用的類實(shí)體的信息,利用這個(gè)方法可以同時(shí)為多個(gè)請(qǐng)求服務(wù),而ProcessRequest方法則接受一個(gè)HttpContext實(shí)體作為參數(shù),從而得到對(duì)Request和Response的存取權(quán)限。

處理思路:當(dāng)對(duì)www.b_image.com/images/book.jpg的請(qǐng)求到達(dá)IIS時(shí),ASP.NET初始化一個(gè)圖像生成器類,在這個(gè)類中,通過(guò)HTTP端口把www.a_image.com/images/book.jpg取回來(lái),再將圖像流返回到HTTP響應(yīng)中。接收并處理HTTP請(qǐng)求是在ProcessRequest方法中完成的。客戶端并不知道實(shí)際發(fā)生了什么事情。

代碼:

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/"); ??????????????//如果使用的相對(duì)路徑,就要手工加入完整的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響應(yīng),返回給客戶端請(qǐng)求 ?????????????image.Save(context.Response.OutputStream,?ImageFormat.Jpeg); ??????????????image.Dispose(); ?????????} ??????????public?bool?IsReusable ?????????{ ?????????????get ?????????????{ ?????????????????return?true; ?????????????} ?????????} ?????} ?}?

配置:

1、 將上面的代碼編譯為ImageLink.dll,在b服務(wù)器建立和a機(jī)器相同路徑的圖片目錄images,并在其下建立bin目錄,將ImageLink.dll拷進(jìn)去,在b服務(wù)器中吧images目錄設(shè)定為一個(gè)應(yīng)用程序,這樣才能針對(duì)此應(yīng)用程序設(shè)定相應(yīng)的程序映射(添加相應(yīng)的擴(kuò)展),以把jpg后綴的請(qǐng)求發(fā)送到ASP.NET去處理。

2、 在Web.Config中配置代碼來(lái)設(shè)定httpHandlers,我們現(xiàn)在要做的把對(duì)images目錄下的jpg文件的請(qǐng)求轉(zhuǎn)到ImageLink來(lái)處理,因此最終的設(shè)定如下:

<httphandlers>?<add?verb=”*”?path=”images/*.jpg”?type=”?WebHttpModule.ImageLink,?ImageLink”/>?</httphandlers>?

將web.config拷到images目錄下。

到此大工就告成了!所有對(duì)b服務(wù)器請(qǐng)求的jpg圖片都會(huì)從a機(jī)器取到,在客戶端卻看不出來(lái)。

原文標(biāo)題:ASP.NET 頁(yè)面aspx之?dāng)U展

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

總結(jié)

以上是生活随笔為你收集整理的详解ASP.NET页面的aspx扩展的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。