国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
通過避免下列10個(gè)常見ASP.NET缺陷使網(wǎng)站平穩(wěn)運(yùn)行

ASP.NET 成功的其中一個(gè)原因在于它降低了 Web 開發(fā)人員的門檻。即便您不是計(jì)算機(jī)科學(xué)博士也可以編寫 ASP.NET 代碼。我在工作中遇到的許多 ASP.NET 開發(fā)人員都是自學(xué)成材的,他們?cè)诰帉?C# 或 Visual Basic® 之前都在編寫 Microsoft® Excel® 電子表格?,F(xiàn)在,他們?cè)诰帉?Web 應(yīng)用程序,總的來說,他們所做的工作值得表揚(yáng)。

但是與能力隨之而來的還有責(zé)任,即使是經(jīng)驗(yàn)豐富的 ASP.NET 開發(fā)人員也難免會(huì)出錯(cuò)。在多年的 ASP.NET 項(xiàng)目咨詢工作中,我發(fā)現(xiàn)某些錯(cuò)誤特別容易導(dǎo)致缺陷不斷發(fā)生。其中某些錯(cuò)誤會(huì)影響性能。其他錯(cuò)誤會(huì)抑制可伸縮性。有些錯(cuò)誤還會(huì)使開發(fā)團(tuán)隊(duì)耗費(fèi)寶貴的時(shí)間來跟蹤錯(cuò)誤和意外的行為。

下面是會(huì)導(dǎo)致 ASP.NET 生產(chǎn)應(yīng)用程序的發(fā)布過程中出現(xiàn)問題的 10 個(gè)缺陷以及可避免它們的方法。所有示例均來自我對(duì)真實(shí)的公司構(gòu)建真實(shí)的 Web 應(yīng)用程序的親身體驗(yàn),在某些情況下,我會(huì)通過介紹 ASP.NET 開發(fā)團(tuán)隊(duì)在開發(fā)過程中遇到的一些問題來提供相關(guān)的背景。

LoadControl 和輸出緩存
極少有不使用用戶控件的 ASP.NET 應(yīng)用程序。在出現(xiàn)母版頁之前,開發(fā)人員使用用戶控件來提取公用內(nèi)容,如頁眉和頁腳。即使在 ASP.NET 2.0 中,用戶控件也提供了有效的方法來封裝內(nèi)容和行為以及將頁面分為多個(gè)區(qū)域,這些區(qū)域的緩存能力可以獨(dú)立于作為整體的頁面進(jìn)行控制(一種稱為段緩存的特殊輸出緩存形式)。

用戶控件可以采用聲明的方式加載,也可以強(qiáng)制加載。強(qiáng)制加載依賴于 Page.LoadControl,它實(shí)例化用戶控件并返回控件引用。如果用戶控件包含自定義類型的成員(例如,公共屬性),則您可以轉(zhuǎn)換該引用并從您的代碼訪問自定義成員。圖 1 中的用戶控件實(shí)現(xiàn)名為 BackColor 的屬性。以下代碼加載用戶控件并向 BackColor 分配一個(gè)值:

protected void Page_Load(object sender, EventArgs e){// 加載用戶控件并將其添加到頁面中Control control = LoadControl("~/MyUserControl.ascx");PlaceHolder1.Controls.Add(control);// 設(shè)置其背景色((MyUserControl)control).BackColor = Color.Yellow;}
以上代碼實(shí)際上很簡(jiǎn)單,但卻是一個(gè)等待粗心的開發(fā)人員掉進(jìn)去的陷阱。您能找出其中的破綻嗎?

如果您猜到該問題與輸出緩存有關(guān),那么您是正確的。正如您所看到的一樣,上述代碼示例編譯和運(yùn)行都正常,但是如果嘗試將以下語句(完全合法)添加到 MyUserControl.ascx 中:

<%@ OutputCache Duration="5" VaryByParam="None" %>
則當(dāng)您下一次運(yùn)行該頁面時(shí),您將看到 InvalidCastException (oh joy!) 和以下錯(cuò)誤消息:

“無法將類型為‘System.Web.UI.PartialCachingControl’的對(duì)象轉(zhuǎn)換為類型‘MyUserControl’。”
因此,此代碼在沒有 OutputCache 指令時(shí)運(yùn)行正常,但如果添加了 OutputCache 指令就會(huì)出錯(cuò)。ASP.NET 不應(yīng)該以這種方式運(yùn)行。頁面(和控件)對(duì)于輸出緩存應(yīng)該是不可知的。那么,這代表什么意思?

問題在于為用戶控件啟用輸出緩存時(shí),LoadControl 不再返回對(duì)控件實(shí)例的引用;相反,它返回對(duì) PartialCachingControl 實(shí)例的引用,而 PartialCachingControl 可能會(huì)也可能不會(huì)包裝控件實(shí)例,具體取決于控件的輸出是否被緩存。因此,如果開發(fā)人員調(diào)用 LoadControl 以動(dòng)態(tài)加載用戶控件并且為了訪問控件特定的方法和屬性而轉(zhuǎn)換控件引用,他們必須注意進(jìn)行該操作的方式,以便不管是否具有 OutputCache 指令,代碼都可以運(yùn)行。

圖 2 說明動(dòng)態(tài)加載用戶控件以及轉(zhuǎn)換返回的控件引用的正確方法。以下是其工作原理概要:

• 如果 ASCX 文件缺少 OutputCache 指令,則 LoadControl 返回一個(gè) MyUserControl 引用。Page_Load 將該引用轉(zhuǎn)換為 MyUserControl 并設(shè)置控件的 BackColor 屬性。

• 如果 ASCX 文件包括一個(gè) OutputCache 指令并且控件的輸出沒有被緩存,則 LoadControl 返回一個(gè)對(duì) PartialCachingControl 的引用,此 PartialCachingControl 的 CachedControl 屬性包含對(duì)基礎(chǔ) MyUserControl 的引用。Page_Load 將 PartialCachingControl.CachedControl 轉(zhuǎn)換為 MyUserControl 并設(shè)置該控件的 BackColor 屬性。

• 如果 ASCX 文件包括一個(gè) OutputCache 指令并且控件的輸出被緩存,則 LoadControl 返回一個(gè)對(duì) PartialCachingControl(其 CachedControl 屬性為空)的引用。注意,Page_Load 不再繼續(xù)執(zhí)行操作。無法設(shè)置控件的 BackColor 屬性,因?yàn)樵摽丶妮敵鰜碓从谳敵鼍彺妗Q句話說,根本沒有要設(shè)置屬性的 MyUserControl。

不管 .ascx 文件中是否具有 OutputCache 指令,圖 2中的代碼都將運(yùn)行。雖然看起來復(fù)雜一點(diǎn),但它會(huì)避免煩人的錯(cuò)誤。簡(jiǎn)單并不總是代表易于維護(hù)。

返回頁首
會(huì)話和輸出緩存
談到輸出緩存,ASP.NET 1.1 和 ASP.NET 2.0 都存在一個(gè)潛在的問題,該問題會(huì)影響在 Windows Server™ 2003 和 IIS 6.0 上運(yùn)行的服務(wù)器中的輸出緩存頁。我曾經(jīng)親眼看到該問題在 ASP.NET 生產(chǎn)服務(wù)器中出現(xiàn)過兩次,這兩次都是通過關(guān)閉輸出緩沖來解決的。后來我了解到有一個(gè)比禁用輸出緩存更好的解決方案。以下是我第一次遇到該問題時(shí)的情況。

當(dāng)時(shí)的情況是這樣的,某個(gè)網(wǎng)站(我們?cè)诖朔Q為 Contoso.com,它在小型 ASP.NET Web 領(lǐng)域中運(yùn)行公共電子商務(wù)應(yīng)用程序)與我的團(tuán)隊(duì)聯(lián)系,抱怨他們遇到了“跨線程”錯(cuò)誤。使用 Contoso.com 網(wǎng)站的客戶常常突然丟失已經(jīng)輸入的數(shù)據(jù),但卻看到另一用戶的相關(guān)數(shù)據(jù)。稍做分析即發(fā)現(xiàn),跨線程這個(gè)描述并不準(zhǔn)確;“跨會(huì)話”錯(cuò)誤更為貼切。看起來 Contoso.com 是在會(huì)話狀態(tài)中存儲(chǔ)數(shù)據(jù)的,由于某些原因,用戶會(huì)偶爾隨機(jī)地連接到其他用戶的會(huì)話。

我的一個(gè)團(tuán)隊(duì)成員編寫了一個(gè)診斷工具,用來將每個(gè) HTTP 請(qǐng)求和響應(yīng)的關(guān)鍵要素(包括 Cookie 標(biāo)頭)記錄到日志中。然后,他將該工具安裝在 Contoso.com 的 Web 服務(wù)器上,并讓其運(yùn)行了幾天。結(jié)果非常明顯。大概每 100000 個(gè)請(qǐng)求中會(huì)發(fā)生一次這樣的情況:ASP.NET 正確地為全新會(huì)話分配一個(gè)會(huì)話 ID 并返回 Set-Cookie 標(biāo)頭中的會(huì)話 ID。然后,它會(huì)在下一個(gè)緊相鄰的請(qǐng)求中返回相同的會(huì)話 ID(即,相同的 Set-Cookie 標(biāo)頭),即使該請(qǐng)求已經(jīng)與一個(gè)有效的會(huì)話相關(guān)聯(lián)并且正確提交了 Cookie 中的會(huì)話 ID。實(shí)際上,ASP.NET 是隨機(jī)將用戶從他們自己的會(huì)話中切換出去并將他們連接到其他會(huì)話。

 


特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn),本站所提供的攝影照片,插畫,設(shè)計(jì)作品,如需使用,請(qǐng)與原作者聯(lián)系,版權(quán)歸原作者所有。
本站文章均來自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系028-86262244-200 QQ: 1585463984 我們將立即刪除!

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
.Net頁面/控件緩存(OutputCache及參數(shù)說明)
ASP.NET緩存使用詳解_控件資料
asp.net網(wǎng)頁緩存配置
CSDN技術(shù)中心 ASP.net中動(dòng)態(tài)加載控件時(shí)一些問題的總結(jié)
編寫高性能 Web 應(yīng)用程序的 10 個(gè)技巧
網(wǎng)站性能優(yōu)化
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服