2012年12月31日 星期一

Form驗證

什麼是 Forms 認證

Forms 認證是最廣泛應用的認證方式,尤其是應用在對外公開的網站,而不是僅內部人員使用的網站。

Forms 認證需要使用者提供密碼驗證,通常他們的資料來自於外部資料來源,如 Membership 資料庫,或是應用程式的組態檔中。 當使用者透過表單驗證成功之後,ASP.NET 會回應一個 cookie 給瀏灠器,作為驗證語彙基元(authentication token),用來表示這個認證過的使用者。 瀏灠器後續提出給網站的需求,都會同時送出這個 Token ,這樣子就不用每次要求都提供認證。 ASP.NET 則可以依這個 Token 驗證使用者的權限。

使用AJAX進行Form驗證

Profiles and Authentication

Profiles ServiceAuthentication Service 本來是 ASP.NET Forms Authentication system 機制底下所提供的標準服務。 而 AJAX Extensions Library 則是透過 script proxy 方式,在 Sys.Services 命名空間底下,提供 script 方法,讓用戶端可以直接存取這些服務。

2012年12月25日 星期二

Microsoft AJAX Library

使用 ASP.NET AJAX Library

Ajax Library 是從 .Net 3.5 開始被加進來,它是一組 client 端的 API ,而且其架構設計,很多看起來就像伺服器端的控制項一樣。 它提供許多好用的新功能,包含:

  • 局部網頁更新。
  • 透過 client script 叫用 web service 。

2012年12月23日 星期日

Health Monitoring 網站

當網站還在開發階段,我們隨時都可以使用 debug 或 trace 來除錯或追蹤網頁資訊。 如果網站在部署之後,我們想要監控系統的錯誤訊息或效能等問題, 就可以透過 ASP.NET 提供的「健康監視 (Health Monitoring)」功能, 將這些訊息輸出到指定事件記錄器或者資料庫之中。

2012年11月29日 星期四

資料繫結控制項(Hierarchical)

The HierarchicalDataBoundControl control serves as a base class for controls that render data in a hierarchical fashion. The classes that inherit from HierarchicalDataBoundControl are TreeView and Menu Control.

資料繫結控制項(Composite)

There are a number of data-bound controls that use other ASP.NET controls to display bound data to the user. For this reason, these controls are referred to as composite data-bound controls. These controls inherit from the base class, CompositeDataBoundControl . This class implements the INamingContainer interface, which means that an inheritor of this class is a naming container for child controls.

組合式的資料繫結控制項包含: GridViewDetailsViewFormViewRepeaterDataListListViewDataPager

2012年11月21日 星期三

2012年11月15日 星期四

LINQ 入門(二)

Language-Integrated Query (LINQ) provides a consistent model for querying data no matter where that data comes from. This allows you to write .NET Framework code (in lieu of SQL) when working with data. LINQ gives you compile-time syntax checking against your data, static typing, and IntelliSense in the code editor. All of these features make programming data easier and more consistent, regardless of the origin of the data.

LINQ is an extension to the development languages of C# and Visual Basic. For more information on the LINQ language extensions, you can review the MSDN topic, Getting Started with LINQ in C#

2012年10月25日 星期四

WCF 簡介

Windows Communication Foundation
WCF 它是微軟於 .NET 3.0 開始加入的一組用於通訊 (Communication) 的應用程式開發介面。 主要功能在開發以服務為導向的分散式系統。

XML Web Service

Web Service 是一種以服務為導向的架構技術,透過標準的 Web 協議提供服務,目的是讓不同平台的應用服務可以互動操作。 根據W3C的定義,Web服務(Web service)應當是一個軟體系統,用以支持網路間不同機器的互動操作。 網路服務通常是許多應用程式介面(API)所組成的,它們透過網路上的遠端伺服機,執行客戶所提交服務的請求。

Web Service 透過 WSDL 文件提供該服務的定義描述。 Web Service 採用 SOAP 協議進行 XML 格式的訊息傳遞。 SOAP 協議必須繫結到某個傳輸協定,這個傳輸協定通常是 http, https, 但也可以是 stmp 或 xmpp.

Client-Side Script

JavaScript

It is important to note that JavaScript is not new.
It is also not really Java.
It is a C-based scripting language invented by Netscape to add client scripting capabilities to a browser.
It is now supported as part of every major browser on the market.
The actual language is controlled and managed by a standards body, the European Computer Manufacturers Association (ECMA).
Because it is widely deployed and offers developers the ability to write code on the client, it has become increasingly popular.
This was especially true once features for communicating between the client script and server code using JSON and XML became prevalent.

Ajax Web Forms

什麼是 AJAX

AJAX 為「Asynchronous JavaScript and XML」(非同步的JavaScript與XML技術),是一種廣泛應用在瀏覽器的網頁開發技術。 Ajax 是多項技術的綜合應用,其概念是由 Jesse James Garrett 所提出。 利用這項技術將可增進網頁的回應能力以提供使用者與主機端的互動功能,以達到網頁非同步處理

AJAX 網頁是屬於用戶端(展示層)的技術,在用戶端的瀏覽器必須使用 JavaScript 的 XMLHttpRequest 物件,送出非同步的 Http Request, 此時只會將指定的欄位資料傳送至伺服器端,而網頁的其他資料並不會進行回傳(PostBack),接著再透過 Http Response 方式將更新後的執行結果下載至用戶端的瀏覽器。 最後透過 JavaScript 將回應的執行結果以背景執行的方式寫回 DHTML 或 DOM(DocumentObject Model) 指定的標籤區塊,此時指定的區塊即會進行更新。由於傳送和接收資料是屬於非同步的模式,因此使用者可以在不換頁的情形下繼續在網頁上進行任何操作。

資料繫結控制項(Simple)

簡單的資料繫結控制項包含: DropDownListListBoxCheckBoxListRadioButtonListBulletedList

資料來源控制項(1)

透過 ADO.NET 我們可以利用程式碼建立資料庫連線以存取資料,這些程式碼通常會被建立在抽象的 DAL 或 BLL 層。 若須求只有簡單的建立連線與存取資料,我們也可以透過資料來源控制項來實現,而不用使用 ADO.NET 。 它可以存取的對象包括 objects, XML, and databases 。

特殊 Server Controls

通用 Server Controls

通用型(common)的伺服器控制項,指的是 LabelTextBoxButtonCheckBoxRadioButton 這類較基本功能的控制項。

認識 Server Controls

Web server controls provide more functionality and a more consistent programming model than HTML server controls. Web server controls are based on .NET Framework classes, typically inherited from the WebControl class. ASP.NET renders web server controls as standardized HTML. In other words, if you use the Button web server control, ASP.NET renders it using the <button> HTML markup tag.

2012年10月17日 星期三

行動網頁

Tracing 網站

當問題不容易在 Visual Studion 中發現時,就可以利用 ASP.NET 提供網頁監測功能進行追蹤。 要使用網頁監測功能,只要透過設定將「追蹤」功能啟用即可。 它可以針對個別網頁或整個網站進行追蹤,例如:記錄使用者資訊,網頁執行時間,錯誤訊息等等。

Debugging 網站

Configuring ASP.NET for Debugging

To configure ASP.NET for debugging, there are two areas where you set this information: the project's property page and the Web.config file.

使用快取

Caching 是 ASP.NET 的一種機制,由 Cache 類別實作,用來提升網頁的效率。 它可以把經常使用的資料存放在記憶體中,就不用每次都得到檔案或資料庫提取。 當然我們也可以自行實作這樣子的機制,只是 ASP.NET 都幫我們做好了,讓我們不用寫程式碼就可以處理複雜的快取。 ASP.NET 提供二種不同的快取:

  • 應用程式快取 (Application caching)
    應用程式快取是透過程式碼將資料以 key/value 的型態儲存在記憶體中。 它有點類似網站之中的 Application State ,不同的是,它的生命週期不像 Application 會跟隨整個網站的生命週期。 它會隨著記憶體空間的限制或時間過期等因素,自動的由集合中被移除。
  • 網頁輸出快取 (Page output caching)
    網頁輸出快取可以將 render 後的網頁的 html 儲存起來,提供給後續相同的網頁要求,以減少回應時間。

部署網站

Websites, by default, are entirely file based. This means that the source code is usually deployed to the server. The server then compiles that code when pages are requested. In this scenario, you can deploy a website to a web server by simply copying the files to the correct directory on the server. No special deployment software is required.

If your website is to be deployed to an array of web servers, you can use any file-synchronization tool to copy the files between the servers. This allows you to deploy to a master server and have the deployment synchronized across the web farm.

If your website has a database, requires special web server configuration, or needs different configuration settings in a release environment, simply copying files will be insufficient.

Visual Studio 2010 includes a new Publish Web dialog box that allows you to configure each of these settings once, and then publish a website to one or more web servers with a single click.

2012年10月8日 星期一

全球化與當地語系的設定

About ASP.NET Resources

To display an ASP.NET page in one of several different languages, you could prompt the user for his or her preferred language, and then write if-then statements to update the text of your page. However, that would be a complex and time-consuming.

ASP.NET uses resource files to support multiple languages. A resource file contains a language-specific set of text for a page or the entire site. Your code accesses a resource file based on the user's requested language.

If a resource file exists for that language, ASP.NET uses it and shows your site in the requested language. If no resource file exists for the given request, ASP.NET uses the default language setting for the site.

資料檔的類型有兩種:區域和全域。

設定協助工具

網站的協助工具 (Accessibility, VisualStudio 中翻成「網頁可及性」) 指的就是無障礙網頁的設計。 它的目的是協助使用非傳統I/O介面的使用者,也可以很方便地使用網站。 例如:有些使用者使用特殊的滑鼠,或者使用螢幕助讀器 (screen readers) 存取網站內容,而不是傳統的螢幕。

驗證使用者

ASP.NET 支援至少四種認證:

  • Windows authentication
  • Forms authentication
  • Passport authentication
  • Anonymous access

Membership

User Profile

ASP.NET 會員管理機制

Profile 指的是 ASP.NET 用來存取個人資料的一個類別,它是 ASP.NET 內建的一套管理機制,預設是必須搭配使用 SQL 的 aspnetdb 資料庫。 該資料庫系統中,同時含有 Membership 機制,可以實現會員管理功能。 也包含 roleManager 機制,可以做到群組化的會員管理機制。

WebPart

Theme

佈景主題 (Themes) 是用來設定控制項或頁面的樣式,讓整個網站看起來會有一致性的風格。 Theme 是樣式的集合,它主要由以下二部份組成:

  • 控制項面板 (.skin) :用來定義控制項的樣式屬性。
  • 樣式表 (.css) :用來定義樣式。

Master Page

Advantages of using master pages include the following:

  • allow you to centralize the common functionality of your pages.
  • allow you to create one controls and code and apply the results to a set of pages.
  • allow you to control over the layout of the final pages
  • allow you to customize the master pages from individual content pages.

2012年10月1日 星期一

使用ASP.NET內建物件

ASP.NET 提供了幾個系統物件,可以用來存取許多相當有用的資訊,例如取得使用者IP,瀏覽器種類等等。 這類物件必須透過 Page 物件的屬性取得,包含:

  • Request :這個物件包含目前 HTTP 要求的相關資訊。
  • Response :這個物件包含回應資訊,允許您將資訊,透過 HTTP 回應給用戶端。
  • Context :這個物件提供網頁執行內容的相關資訊。
  • Browser :取得或設定關於用戶端瀏覽器的資訊。
  • Server :這個屬性提供常用的 HtmlEncodeMapPath 方法。
  • Application :取得目前 Web 要求的 HttpApplicationState 物件。
  • Session :這個屬性提供目前要求的工作階段(Session)資訊。
  • Trace :追蹤並顯示關於 Web 要求的執行詳細資料。

自訂網站錯誤處理

Custom Web Server Controls

User Controls

在 Web 應用程式中,要建立自訂控制項有二種方法:

  • User Control:將數個Web控制項組合成單一的控制項。
  • Custom Web Server Control :繼承現有Web控制項並加以擴充功能成新的控制項。

下圖是 VS2008 裡的項目名稱

在 VS2010 裡的項目名稱則略有不同

若是在 Windows 應用程式中,你可以新增以下二種項目來建立自訂的控制項。

  • User Control:這個項目會直接繼承 UserControl 類別,可用來將數個 Windows Form 控制項組合成單一的控制項。
  • Custom Web Server Control:這個項目會直接繼承 Control 類別,所以它只提供控制項的基本功能,其它功能如:圖形介面、事件程式碼等都要自行撰寫。

當然,若要自訂的控制項,功能與現有的 Windows Form 控制項類似的話,最簡單的方法就是直接繼承 Windows Form 控制項。 這樣做可以保留 Windows Form 控制項的所有繼承功能,然後藉由加入自訂屬性、方法或其他功能來擴充該功能。

網站巡覽控制項

伺服器端狀態管理

驗證控制項

用戶端狀態管理

2012年9月16日 星期日

編輯與讀取 XML 文件資料

加密連線字串

使用 ADO.NET Connected 類別

DBConnection

  • 與 Connecton 相關的物件,最主要的功能就是移動「Disconnected 相關物件」與「資料儲存區」間的資料。
  • 不同的資料儲存區,會使用不同的資料提供者,如 SqlClientDataProvider 、 OleDbDataProvider 、 OracleClientDataProvider 。
  • 要建立一個連線,必須要有一個有效的連線字串。
  • 傳送指令到資料儲存區前,必須開啟連線。
  • 使用 Using 區塊可以在程式碼結束時,自動處置連線。
  • 若使用同一個連線字串建立連線時,系統會使用 ThreadPool 中的連線物件,減少另外建立連線的資源消耗。

2012年8月21日 星期二

Datetime 型別

DateTime 物件

認識 DateTime 物件

DateTime 是一個結構型態的實值型別,是用來表示日期和時間的物件,具有以下幾個特性:

  • 可記錄範圍:0001/1/1 12:00:00 AM ~ 9999/12/31 11:59:59 PM
  • 時間值是以刻度(Tick)為最小單位,每個 Tick 等於 100 奈秒。
  • Tick 值由 0001/1/1 12:00:00 AM 開始累加計算,每 100 奈秒,Tick 值加一。

2012年8月14日 星期二

資料流

Stream 物件是由 byte 所組成的序列(sequence)。 它本身是一個抽象類別,底下圖表中的實作類別,可以使用在各種不同的場景下。

2012年6月27日 星期三

如何取得特定網頁的文件內容

若想要透過程式取得特定網頁的內容,可以透過以下幾種元件:

  • WebBrowser:網頁瀏灠控制項。
  • WebRequest:這個類別可以對指定 URI 發送需求與接收回應。
  • WebClient:這個類別包裝 WebRequest 類別,也可以對指定的 URI 傳送與接收資料,可以說是 HttpWebRequest 的精簡版

2012年5月18日 星期五

.NET 中使用 COM 物件

Interoperation

Managed vs Unmanaged

  • Managed 程式碼:在執行階段(CLR)控制之下執行的程式碼,如 C#/VB.NET 等語言所開發的程式碼。
  • Unmanaged 程式碼:如 VB6/C/C++ 等語言所開發的程式碼。或者 COM 元件、ActiveX 介面及 Win32 API 函式,都是 Unmanaged 程式碼。

Interoperation 泛指由 Managed 程式碼與 Unmanaged 程式碼的互動。

COM 中使用.NET 元件

上一篇介紹如何在 .NET 中使用 COM ,這一篇將討論如何公開 .NET 元件給 COM 使用。

使用 Unmanaged 程式碼

除了舊有的 COM 元件是 Unmanaged 程式碼之外,在 Windows 系統底下還有許多的 Windows APIs 是 .NET Framework 沒有包裝的。 這個章節就是要來認識如何叫用 Windows APIs.

2012年5月17日 星期四

委派的演變

委派是一種定義方法簽章的型別,隨者 C# 版本的演變,它的使用方法也有些許的變化。 例如:具名方法,匿名方法,Lambda表示法。

2012年5月16日 星期三

LINQ 入門(三)關連性查詢

跨 Table 的關聯性查詢

直接使用物件模型中的關連

如果在資料庫中 Catalog 和 Documents 之間已經建立了關連性(外部索引鍵),在 linq 語法中,此時不需要在 Catalog 和 Documents 之間使用「聯結」(Join), 就可以直接從 Catalog 物件存取 Documents 物件。

2012年5月15日 星期二

LINQ 入門(一)

LINQ 簡介

MS 在 .NET Framework 3.5 版中,引進一個新的功能,稱之為 LINQ (Language Integrated Query)。 它是一種針對集合元素進行查詢的語言,如此一來,不管你使用何種資料來源,只要該資料是實作 IEnumerable 介面的物件,都可以使用單一的 LINQ 語法去查詢處理。

LINQ 使用類似 SQL 查詢的語法:
from 子句指定查詢來源;
where 子句設定篩選條件;
order by 子句做排序;
group by 子句對資料分組,
select 子句回傳資料。
而且,LINQ 查詢也支援複雜的 join 語法,這樣就可以在程式語言中,直接執行複雜的連結運算,以達到資料搜尋的目的。

2012年5月10日 星期四

傳遞參數

使用 ref 和 out 傳遞參數

ref vs out

refout 這二個關鍵字都是用來宣告使用傳址 (By Reference) 方式傳遞參數。使用上也都必須明確使用 ref 或 out 關鍵字。

二者之間最主要的差異在於:

  • 使用 ref 修飾詞的參數,其參數傳送前必須要有值。
  • 使用 out 修飾詞的參數,其參數回傳前必須要有值。

2012年5月9日 星期三

使用者的驗證與授權

存取控制清單

存取控制清單 (Access Control List, ACL)

前一章節中,我們透過 RBS 架構下的驗證與授權機制 (Principal Permission),達到限制特定使用者或群組對程式碼的存取。

存取控制清單 (ACL) 也是一種權限控管的機制,是作業系統用來管控資源的使用權限檔案,如:資料夾、印表機、註冊機碼等。 它是由存取控制項 (ACE) 所組成,每一項 ACE 指明了某物件是否可被存取。 例如,若想阻止系統管理員以外的任何人讀取某個檔案,就可以建立一個特定的 ACE,並套用到該檔案的存取控制清單 (ACL) 即可。

ACL 包含二種類型:

  • discretionary access control list (DACL):自主式存取控制清單
  • system access control list (SACL):系統存取控制清單

資料的加密與解密(1)-對稱金鑰加密演算法

當資料被永久性的儲存下來後或者於網路上傳輸的時候,都是很容易遭受攻擊的。 雖然有 CAS 可以用來控管應用程式的存取,或者 ACLs 可以用來保護資料,但是對有能力存取硬碟或網路的駭客而言,想要穿透軟體保護、截取資料或者修改資料是不難辦到的。 因此,對於一些隱私的資料,還必須使用加密的技術,進一步保護資料的完整性。 .Net Framewrok 提供數種加解密類別,可以用來支援各種型態的加解密需求,例如:對稱和非對稱加密、雜湊、數位簽章。

資料的加密與解密(2)-非對稱金鑰加密演算法

二、非對稱金鑰加密 ( Asymmetric Key Encryption )

對稱加密法有個不好的問題,就是加密子與解密子雙方都要共享同一個金鑰。 非對稱加密法主要就是要克服這個弱點,它將金鑰分成公開金鑰 (public key) 與私密金鑰 (private key),所以一般也稱公開金鑰加密法。 該演算法中的公開金鑰是對外開放的,私密金鑰必須妥善保存,絕不可外洩;而使用公開金鑰加密的資料,必須使用相對應的私密金鑰才能解密,反之亦同。 所以,對稱加密法,其操作過程,通常雙方必須先交換公開金鑰,然後發送端使用對方的公開金鑰將明文轉成密文,接收端收到密文後,再以自已的私密金鑰進行解密。

資料的加密與解密(3)-雜湊

三、使用雜湊(Hash)驗證資料的完整性

由書上截取二句話:

  • A hash is a checksum that is unique to a specific file or piece of data.
  • A hash is a one-way operation.

所以說,雜湊(Hash)是將一堆資料進行一個總和運算後所得到的一個唯一檢查碼,又稱為雜湊值 (Hash Value) 。
雜湊演算是單向作業,不可逆的,也就是無法將雜湊值反導出原始資料,不像先前的加密作業,還可以解密回去。

資料的加密與解密(4)-數位簽章

當我們去銀行提款時,通常都需要蓋個章,用以保證這是你本人送交的東西。 在網路上傳送資料給對方,為了確保這資料是由你本人送出的,所以也需要在資料中蓋個章,這就是「數位簽章」的概念。 數位簽章相當於個人之印鑑,憑證相當於此印鑑之印鑑證明。電子化網路環境下,可利用憑證來驗證個人之數位簽章,以確認個人身分。

2012年3月28日 星期三

使用文化特性

當設計一個有多語系需求的程式時,除了UI上面的文字以外,另外像日期或幣值的顯示格式也都是要考量進來的議題。 例如:日元的顯示格式為 ¥123,456,而台幣的顯示格式為 NT$123,456;或者像日期的格式,美國使用的是 月/日/年 ,而日本使用的是 年/月/日。這些差異都會因為不同地區而有所不同,簡稱文化特性。 像這類狀況,因為我們無法預期未來會面對什麼樣的使用者需求,如果等系統開發完成後,才依照不同的地區性去做修改,那這個成本肯定會變的更大。 因此如何將資料依不同的文化特性格式化就變的很重要的課題。.Net Framework 提供了 System.Globalization 命名空間來幫助開發者解決這個問題。

2012年3月27日 星期二

寄送郵件

從 .Net2.0 開始, System.Net.Mail 命名空間提供開發者建立及傳送郵件訊息的相關方法。

  • MailMessage
    這個類別是用來建立電子郵件。支援簡單的純文字、HTML格式的電子郵件訊息、以及不同檢視方式、編碼標準及附加檔。
  • SmtpClient
    這個類別是用來寄送電子郵件。支援匿名網路連結、使用者驗證及SSL加密,另外也可以非同步寄送電子郵件,且允許使用者在寄送完成前取消寄送。

2012年3月23日 星期五

is 和 as

由於物件都是多型的,因此可以使用某個基底類別 (Base Class) 型別的變數來存放衍生型別 (Derived Type)。
若要存取衍生型別的方法,您必須將值轉型回衍生型別。
不過,在這種情況下嘗試進行簡單轉型卻會有擲回 InvalidCastException 的風險。
這就是 C# 提供 is 和 as 運算子的原因。
您可以使用這兩個運算子測試轉型能否成功,而不會擲回例外狀況 (Exception)。

as 運算子通常比較有效率,因為如果轉型能夠成功,它實際會傳回轉型值。
is 運算子卻只會傳回布林值,因此它可以用在只是要確定物件的型別而不必實際轉型的情況。

2012年3月21日 星期三

認識反射

Reflection ,一般稱為「反映」或「反射」,反射系統提供了瀏覽和檢測資料型別的功能。 通常,我們在使用型別資料的時候,順序大都是先取得型別參考,然後建立instance,再叫用其已知的屬性或方法。 Reflection 則可以動態載入組件,再檢測該型別中有哪些的屬性或方法,再進而呼叫使用。

例如,一些外掛(plug-in)的組件,系統開發階段根本不知道會遇到什麼外掛組件,那要如何存取型別? 通常就是透過 Reflection 動態載入組件,再將組件中的型別繫結給已知的物件,進而叫用其方法(method)或存取其屬性(property)。

反射組件的屬性

當我們設計一個組件時,除了類別的定義之外,還有一些額外的資訊是不包含在類別之中的,例如:版本編號,作者,公司資訊等等。 這些資訊統稱組件屬性,也就是前一節介紹的組件中繼資料。 欲編輯這些資訊可以在專案中開啟 AssemblyInfo 這個檔案,它就是用來儲存組件屬性的設定檔。(C#的檔案名稱為 AssemblyInfo.cs;VB的檔案名稱為 AssemblyInfo.vb)

反射組件的型別

前面章節,已經說明了組件與模組的用法,接下來要說明的是型別的反射。

取得型别 (Type)

要取得一個型別物件 ( Type ),可透過以下幾個方式:

動態載入組件

在瞭解組件的相關資訊後,本章節接著要探討的是,一個組件在沒有事先被參考的前題下,如何被動態載入與執行。

動態建立組件

反射不僅可以檢測已經存在的組件的型別資訊,也可以在執行階段,自行定義組件資訊,並回存到磁碟以重複使用。

2012年3月20日 星期二

委派與反射

委派就是要委託某個執行方法,但是,若是這個執行方法必須要在 RunTime 才能決定的話,那要如何設計這個委派呢?

2012年3月14日 星期三

程式碼安全性

在Windows作業系統中,一般我們比較常用的安全系統是以使用者或角色為主的安全性機制(role-base security, RBS), 透過對使用者或角色的管理,達到權限控管的目的,這也是大家比較熟悉的權限管理機制。

如果當我們使用一個外來的組件來存取磁碟,為了確保它內部無法執行任何的惡意行為,你希望限定這個組件只能存取特定目錄,像這樣子的狀況,就無法使用 RBS 達到規範,而必須透過 CAS 管控到程式碼身上才有辨法。

組件的安全性

CAS 是一種用來限制資源被存取的機制,包括檔案、目錄、印表機、網路存取...。 .NET Framework 對每個可以被保護資源各提供一類別,定義在 System.Security.Permissions 命名空間裡。 每個類別都有各自的特定成員,藉以控制相關資源的使用權限。例如:

方法的安全性

前一章節所描述的內容,是針對整個的組件(assembly),進行 CAS 設定以保護組件的安全。 除此之外,也可以針對組件的方法 (method) 做各別的 CAS 設定以保護方法 的安全。 建立方法安全性時,有二種方式:宣告式 (Declaratively) 和命令式 (Imperatively) 。 使用宣告式時,編譯器會在程式碼執行前就做安全性檢查; 使用命令式時,則在程式碼執行中才做安全性檢查,並控制檢查失敗的處理作業。

方法使用權限請求的種類

設定方法的使用權限請求,也是透過 SecurityAction 列舉型別的設定,就可以請求特定的使用權限。 前一章節有介紹到,在 CAS 組件宣告時, SecurityAction 共有三種設定值,但是在 CAS 方法宣告中,則有六種不同的權限請求設定值:

  • Demand ( 要求 ) :堆疊中的所有呼叫端都要有權限。
  • PermitOnly :指明本方法中,僅可以執行的權限,用來降低權限。
  • Assert ( 判斷提示 ) :告訴 runtime ,只要此呼叫端有權限即可,可以忽略再往上層的檢查。
  • Deny ( 拒絕 ) :拒絕某個權限,用來降低權限。
  • LinkDemand ( 連結要求 ) :只要立即呼叫端(直接呼叫的那個呼叫端)有權限即可。
  • InheritanceDemand ( 繼承要求 ) :。

注意1:

其中的 LinkDmand 和 InheritanceDemand 二項,只能用在 Declaratively ,不能用在 Imperatively 。

注意2:

當某個方法的屬性值被設成 DemandLinkDemand ,CAS 並不是檢查目前這個方法的使用權限,而是檢查呼叫的那個方法的使用權限。 Demand 要求所有呼叫端都要檢查;LinkDemand 要求只要檢查直接呼叫端即可。

事件 (Event)

事件說明

什麼是事件

事件是物件的一種機制,當物件在某種條件狀況下,該事件就會被引發。若客戶端程式有訂閱這個事件,該物件就會送出事件引發訊息。
傳送事件的類別稱為發行者(Publisher)-> Raise Event
接收事件的類別稱為訂閱者(Subscriber)-> Handle Event

事件是物件的一種機制,比較學術的說法則是,事件是一種特殊的委派方法。通常可由二個方面來看事件:發行者和訂閱者。

  • 發行者(Publisher):引發事件的類別 (Raise Event Class)
  • 訂閱者(Subscriber):接收事件的類別 (Handle Event Class)

委派 (Delegate)

什麼是委派

話說委派

在設計一個類別的時候,我們可能必需在某些情況下去執行某些事情,但又不想/無法在類別裡寫死處理的方法,這時就要用到委派。 我們僅在類別裡定義一個特定的簽名(signature),指出要執行的方法的樣子(樣子指的就參數列與回傳值的型別),至於該方法叫什麼名字,內容如何,則由呼叫端於呼叫時自行決定。

舉個例好了:
假設你在設計一個警報器,你在這個類別上加上了一個"警鈴響了"事件,事件發生時,這個類別啟動自動處理模式,例如,撥打119或撥打110或通知老闆...。 但是你在設計時,根本不知道使用者要如何處理,所以這部分就可以留待使用者自行撰寫處理方法。

也就是說,在設計類別時,可能會碰到某個方法在執行時需要額外處理,但是你無法將這部分的處理寫死在類別裡,此時就得將這個部分「外包」給呼叫端自行處理。 而客戶端必須事先提供一個處理函式,等到類別的方法要執行的時候,就會回頭去呼叫(callback)那個客戶端事先指定的處理函式。這個處理函式就稱為「委派方法」。

2012年3月9日 星期五

Common Language Runtime

通用語言執行平台(Common Language Runtime,簡稱CLR)是微軟為.NET的虛擬機器所選用的名稱。 這是通用語言架構(簡稱CLI)的微軟實作版本,它定義了一個程式碼執行的環境。 CLR執行一種稱為通用中間語言的位元組碼,就是 Microsoft Intermediate Language (MSIL)。這個是微軟的通用中間語言實作版本。

如何變更 SQL Server 預設的資料檔路徑與備份檔路徑

在操作 SSMS 時,常會碰到二個預設目錄,一個是在新增資料庫時,資料庫存放的目錄,一個是在備份資料庫時,備份檔存放的目錄。 由於系統使用的預設的目錄為 C:\Program Files\Microsoft SQL Server\MSSQL10_50.W7_SQLSVR_2008\MSSQL\Backup\ , 這通常不是大家慣於使用的位置,每次新增或備份資料庫的時候,就得手動再切換到自已要使用的目錄。 如果你跟我一樣覺得這樣子很麻煩的話,底下的示範就是說明如何變更這個預設目錄的值,讓使用 SSMS 時可以方便一點點。

2012年3月7日 星期三

Get Oracle Schema Info

如何快速取得 Table 的總筆數

MSSQL中與 schema 相關的語法

資料轉移

FileTracker Error

XML Menu

在設計視窗程式時,常常會使用到 MenuStrip 控制項來設計功能選單。 不過有時候選單項目無法在設計階段就決定,必須等到執行階段才能決定,這時候就必須利用到動態載入選單的技巧。

這篇文章,將使用 XML 文件來規範選單的內容,再透過反射的技巧,開啟要執行的表單。

組件

什麼是組件 (Assembly)

組件是組成 .NET 應用程式部署、版本控制、重複使用、啟動範圍設定和安全權限的基本單位。 組件的形式為可執行檔 (.exe) 或動態連結程式庫檔案 (.dll),而且是 .NET Framework 的建置組塊。 它們提供 CLR 需要注意的型別實作資訊。您可以將組件視為構成一個功能邏輯單位、而且必須共同合作的一組型別和資源集合。

CKEditor

檢視網頁CSS的工具

CSS繼承

  • 什麼是CSS繼承
  • CSS的繼承規則和權重
  • 少用CSS的繼承,多用組合

SyntaxHighlighter

CSS語法

  • 一、CSS語法概念
  • 二、CSS套用方式
  • 三、CSS串接(cascade)
  • 四、CSS串接方法

使用 Div 做排版

使用 <div> 做排版

display 屬性

  • 區塊模式(display:block):元素會以區塊方式呈現,除非設定 position 或 float。
  • 行內模式(display:inline):所有文字或圖片均不換行,也就是全部都會是同一行的意思。

DreamWeaver Hotkey

相對路徑 vs 絕對路徑

Properties

屬性(Properties)

HttpContext 物件

Regex 所使用的符號彙整

Web Form 的事件簡介

2012年3月6日 星期二

建立AppDomain

什麼是應用程式定義域 ( application domain )

一般當執行一個應用程式的時候,系統會建立一個新的處理序 (process),不同的處理序,其記憶體的管理或資源的存取基本上是獨立的。 當這個程式需要執行外部應用程式(組件),它可以直接啟動這個外部組件,但這樣做,系統也會建立一個新的處理序,這麼做除了會多耗用資源外,也有安全上的弱點(security vulnerabilities)。 要避免這些風險的最好方法就是建立一個有限權限的 AppDomain ,然後將要執行的這個外部組件載入這個 AppDomain 中執行。

應用程式定義域 (AppDomain)

  • AppDomain 是一個邏輯的儲存空間,允許在單一個處理序(process)中,執行多個組件(assembly)。
  • 每一個組件的執行個體,其記憶體空間和資源都是獨立的,無法彼此直接存取。
  • IIS 中,ASP.NET 會為每個使用者分別建立一個 AppDomain
  • AppDomain 提供了如 process 的許多功能,但是不用花費建立 process 的額外負載。
  • 某一個 AppDomain 即使掛了,也不會引響其他的 AppDomian 。

設定AppDomain組態

前言

當建立一個 AppDomain 時,我們也可以修改它的屬性設定以適應要載入的組件。 例如,當我們想載入一個不明的組件到某個 AppDomain ,我們可以建立一個較小使用權限的 AppDomain ,以降低安全性弱點的風險。 AppDomain 不僅可以提供隔離單位,還可以降低被攻擊時所可能造成的損害。 尤其當呼叫組件執行時,適當的限制 AppDomain 的權限,將可大大減少惡意行為風險的發生。 例如,當我們使用一個外購的組件進行指定目錄的備份監控,要如何肯定這個程式不會讀取其他目錄的資料呢?或者如何提防它是否會透過網路將資料外傳呢? 反之,當我們設計一個組件,若沒有做任何安全性的限制,它會不會變成漏洞,反而被其他組件拿來當成跳板,執行不該有的行為呢?

Windows Service

Microsoft Windows 服務,也就是先前的 NT 服務,可讓您建立長期執行的應用程式,在應用程式本身的 Windows 工作階段 (Session) 中執行。 這些服務可以在電腦啟動時自動啟動,也可以暫停或重新啟動,都不會顯示任何使用者介面。 這些功能使得服務非常適合在伺服器中使用,或每當需要不干擾使用同一部電腦之其他使用者的長期執行功能時使用。 您也可以在不同於登入使用者或預設電腦帳戶的特定使用者帳戶的安全性內容下執行服務。

2012年2月15日 星期三

Event Log

要記錄log,可以用各種方法,EventLog 只是 Windows 本身提供的一種機制,可以用來記錄應用程式的狀況。

Debug and Trace

Debugging and Tracing

Debugger 類別

Debugger 類別讓應用程式可以和偵錯程式溝通。底下是Debugger常使用的方法:

Random r = new Random();   
int x = r.Next( 1, 10);
if (x > 5)
{
    Console.WriteLine("x > 5");
    Debugger.Break();       //這一行程式碼的目的,相當於在此設立中斷點
}
Debugger.Log(1, "Test1", "This is a test");   //Log:送出一個訊息到預設的輸出(接聽物件)

監測效能

處理序(Process)

  • A process is a memory slice that contains resources.
  • An isolated task performed by the operating system.
  • An application that is being run.

Process元件提供對電腦上正在執行處理序的存取。 以最簡單的話來說,處理序就是正在執行的應用程式。 執行緒則是作業系統配置處理器時間的基本單位。 執行緒可以執行處理序的任何部分程式碼,包括目前正由另一個執行緒執行的部分在內。

監測管理事件

在程式中,我們常常會需要去檢查電腦的某些狀況,例如:目前某個服務的狀態或者磁碟空間剩餘多少等等。此外,要是這些狀態還可以自動回報,那就更好了。 沒錯,WMI 就是這樣一個好物。

Windows管理規範 (Windows Management Instrumentation, WMI) 是 Windows 作業系統的服務元件, 它提供系統管理員方便管理應用程式與資源的工具,同時可以透過程式去存取應用程式、服務和其他電腦元件的管理資訊 (例如,組態設定和屬性值)。 底下列表為WMI的幾個主要功能:

  • 1. 在遠端電腦器上啟動一個工作。
  • 2. 設定一個在特定日期和時間執行的工作。
  • 3. 遠端啟動電腦。
  • 4. 獲得本機或遠端電腦的已安裝程序列表。
  • 5. 查詢本機或遠端電腦的 Windows 事件日誌。

2012年2月8日 星期三

組態設定

組態設定

認識組態檔

系統開發時,一定會使用組態檔,來記錄一些可能會變動的資訊,以避免因 hard-code 所造成的不方便。 .NET底下的 System.Configuration 命名空間所提供的類別,就是用來管理組態設定用的,讓開發者可以更輕鬆的存取這些資訊。

組態管理

在組態檔中,通常我們將通用設定存放在 AppSettings 區段、 資料庫連線設定存放在ConnectionStrings 區段。 然後將應用程式設定存放在 userSettings 或 applicationSettings 區段。如果某個區段中的設定項目很多,那麼該區段內的資料就容易變的雜亂。 這時候就可以使用自訂區段,將設定值資料分區段存放,避免將所有設定值都儲存在同一區段底下,在管理維護上會比較明確。

.NET2.0組態工具

前言

若有一個應用程式,參考了一個類別庫(版號1.0.0.1),當這個類別庫升級至(1.0.0.2)時,怎麼辨? 過去在win32時代,我們使用regsvr32,將dll註冊到system32目錄底下達到共享的目的, 但是,那時候的機制是不支援不同版本同時運行的,也就是,當新版本被註冊後,舊版本就自動被取代了, 而參考這個類別庫的應用程式,若對這個新的版本有不支援的狀況時,就會導至錯誤發生。

建立Installer

要設計安裝程序,可以在 Visual Studion 中建立一個安裝專案,將應用程式專案打包成一個安裝檔後,再進行安裝。 另外也可以在應用程式專案中,自行加入一個安裝類別,再透過安裝工具 InstallUtil.exe ,將該組件安裝至系統。

2012年2月1日 星期三

多執行緒

簡單講,執行緒就是要讓程式有並行處理的能力,也就是希望同一時間可以執行多項作業。 對 Windows 應用程式而言,讓耗費時間的工作在幕後執行,可以讓 UI 仍能保持回應能力。 對伺服器應用程式而言,多執行緒處理可讓不同的執行緒去處理每個接收到的請求。否則,在先前的請求完全得到滿足之前,每個新的請求都不會獲得服務。

幾底幾個項目,都是.NET 中用以提供達到這樣的功能的類別物件。

不管使用以上哪一種方式,只要是並行作業的處理,你都必須將所要執行的程式碼用一個函式包起來,而且這個函式必須是無回傳值的函式。 而所謂的非同步作業模型,指的就是在另一個執行緒中去執行該函式,這樣主程式就可以繼續下一行程式,不用一直等到函式結束。 若主程序有參數要傳遞給它,也只能使用一個 Object 型別的參數。 例如:。

void DoWork()
{
    //ToDo..
}

void DoWork_Para(Object state)
{
    //ToDo..
}

資料同步問題

同步處理機制是設計 Multi-Thread 時必須特別注意的工作,主要的目的是要限制,當兩個或多個執行緒需要同時存取同一個共用資源時,一次只能有一個執行緒可以使用該資源。 為了避免其他執行緒同時存取,該資源將被獨佔鎖定,這樣的機制就稱為「同步處理機制」。 針對單一簡單的變數運算或者區塊的程式,.NET提供了多種不同的機制以達到同步鎖定( Synchronization Locks )的目的。

非同步程式設計

非同步作業通常是用來執行可能需要很長時間才會完成的工作,例如,開啟大型檔案、連接到遠端電腦或查詢資料庫。 要設計非同步作業,除了自行利用 Thread 物件增加執行管道外,在 .NET 中已提供幾種設計模式來快速達到非同步作業的目的。

2012年1月26日 星期四

繪製圖形

命名空間 System.Drawing 提供建立或修改影像 (image) 的方法。 例如:

  • add circles, lines, and other shapes
  • create charts from scratch
  • edit and resize pictures
  • change the compression ratios of pictures
  • crop and zoom pictures
  • add copyright logos or text to pictures

序列化物件

什麼是序列化 (Serialization)

當宣告一個字串或數值變數並給定一些資料後,若須要將這些資料儲存起來,我想這沒多大問題,甚至自訂一個格式,日後還可以把它讀入相同型別的變數。 不過,如果這個變數是一個自訂的類別,例如 Employee ,或者一個 .NET 參考型別,如 Font、Hashtable、Datatable 類別等等,那你又會如何儲存呢? 這時,我們需要將物件資料轉成某個特定格式,這樣子才有辨法儲存至檔案、或者傳送給另一個程式、或者透過網路傳輸。 這樣子的一個轉換過程,就稱為 序列化 (Serialization)

序列化可分成二個階段:

  • 序列化 (Serializing) : 將一個 object 轉換成線性的 byte[] 資料,以方便資料的儲存與傳輸。
  • 還原序列化 (Deserializing) : 將先前序列化的資料轉換成 object。

使用影像(Images)

Image class

Image 類別是 GDI 用來處理影像的類別,但是 Image 是一個抽象基底類別,必須藉由 Image.FromFileImage.FromStream 方法,才可建立 instances。 或者由它的二個繼承類別來處理: BitmapMetafile

  • Bitmap 類別:靜態影像。透過提供載入、儲存和管理點陣影像的其他方法,增強 Image 類別的功能。
  • Metafile 類別:動能影像。透過提供記錄和檢視向量影像的其他方法,增強 Image 類別的功能。

XML 序列化

什麼是 XML

  • XML 是一種以文字為主的標準化格式,可用來儲存應用程式的資訊,且具可讀性。
  • XML 可以儲存任何型別的資料,包括文件、圖片、音樂、二進位檔案等資訊。

文字設定

如何在圖形中加入文字

步驟如下:

自訂序列化

當我們使用 BinaryFormatterXmlSerializer 去序列化一個類別時,系統會依設定幫我們直接產生序列化後的資訊。 但是,如果遇到版本的問題,或者某些類別不支援序列化時,導至還原序列化後的資訊不符合需求, 這時候就是使用自訂序列化的時候,也就是覆寫.NET Framework內建的序列化程式,並自行撰寫程式碼以控制序列化後的資訊。 使用自訂序列化,可以在不破壞該類別的前提下,達到上述問題的解決。

如何實作自訂序列化

若要自訂序列化,就要實作 ISerializable 介面,並且將 Serializable 屬性套用到該類別即可。

要實作 ISerializable 介面,就必須實作以下二件事:

  1. 實作 GetObjectData 方法,在這方法中填入序列化所需的資訊到 SerializationInfo 物件之中。
  2. 建立用來還原序列化時的特殊建構函式。

這個方法和建構函式的參數都是 SerializationInfoStreamingContext 型別。
GetObjectData 方法之中,主要必須撰寫的程式碼,就是使用 AddValue 方法,將想要序列化的變數,以 name/value 方式加入到 SerializationInfo 物件之中。
使 SerializationInfo 這個物件具有足夠的序列化資訊,以便在還原序列化過程中用來重建該物件。

2012年1月16日 星期一

集合類別

比較表

CollectionDictionaryCollection<T>Dictionary<T,U>
基本型 ArrayList Hashtable List<T> Dictionary<T,U>
字串型別 StringCollection StringDictionary :1 key -> 1 value
NameValueCollection :1 key -> n value
List<T> Dictionary<T,U>
Bool型別 BitArray
連續型的 Stack :LIFO
Queue :FIFO
Stack<T>
Queue<T>
item 順序 SortedList :順序依 key 值自動排序
OrderedDictionary :順序維持加入的順序
SortedList<T,U>
SortedDictionaryt<T,U>
Dictionary<T,U>
存取效能 ListDictionary :適合項目小於 10 個的集合。
HybridDictionary :項目無法預期時,這個類別會自動調整。
Dictionary<T,U>

正規表示式

文字處理是很頻繁的例行工作,Regular Expression 正是一個複雜,但有效率的文字處理技術。
RegExp簡單的觀念就是先建立一組 pattern 字串, 再用這組字串去和資料做筆對。
例如判斷字串中是否含有"abc",或者含有email,或者含有身份證格式的文字....

編碼與解碼

什麼是編碼與解碼

「碼」:將原本的資訊,以特別的代號來表示,只要知道每種代號的意義,就能以代號來獲知原本的資訊。 例如:._ _... _._. 就是摩斯電碼。還有像 ASCII, BIG5, UTF8 ... 都是一種「碼」。

  • 編碼(encoding):將一組 Unicode 字元轉換成位元組序列的處理程序。( string to byte[] )
  • 解碼(decoding):將已編碼的位元組序列轉換成一組 Unicode 字元的處理程序。( byte[] to string)

我們都知道,電腦中的文字,都必須使用某種編碼標準(encoding standard)進行編碼(encoding)後,才可以存放在記憶體或檔案中。只是這個編碼與解碼的過程,通常系統都會自動幫我們處理。 不過,有時候我們還是必須手動處理這個編碼與解碼的過程,例如:要將資料和Unix系統交換時,或者要以指定的編碼標準處理文字檔案等等。 其實,每一種編碼標準都是為了轉換 byte value 與 character。 就像 ASCII 就是一種老舊但也是最廣泛使用的編碼標準之一。 例如其中 0x41 = A, 0x61 = a ...。 不過,因為這個編碼標準對非英語系的支援非常有限,所以也就延伸出各種 Unicode 的編碼標準以支援各種語言。

ArrayList 集合

集合物件的特性:允許資料項目的增減,可以巡覽集合中的資料項目。

Stack、Queue 集合

ArrayList 中,我們可以直接存取集合中任何一個資料項目,但有時候我們並不需要如此功能,只需要可以循序存取集合中的項目即可。 在 .Net 裡,提供了二個循序串列 (sequential list) 物件:QueueStack 。 這二個物件的特色是,可以在一個步驟中,由集合中取出資料項目,並同時將該資料項目由集合中移除。

Dictionaries

什麼是 Dictionaries

當資料型態具有 key/value 特性時,就可以使用 Dictionary 類型的集合。它可以用來建立索引表,將任意的 key 與 value 做關連對應。.NET Framework 包含下列 Dictionary 類別:

  • Hashtable :最基本的字典集合,每個項目都是儲存在 DictionaryEntry 物件中的 key/value 組。可透過 key 取得項目的 value。
  • SortedList :類似 Hashtable,會自動以 key 排序集合內的項目。
  • ListDictionary :當集合項目少於10個時,採用這個集合類別效率較佳。
  • HybridDictionary :使用這個集合,當集合項目少於10個時,會採用 ListDictionary ,若項目變大時,會自動轉成 Hashtable
  • OrderedDictionary :類似 Hashtable ,但集合中的項目會依加入的先後順序排列,不像 Hashtable 是依 hashcode 排列。

底下二個是比較特殊類似字典的集合

  • StringDictionary :類似 Hashtable ,但 key/value 都只允許字串型別, Key 不能重複,一個 key 只能對應一個 value 。
  • NameValueCollection :類似 Hashtable ,但 key/value 都只允許字串型別, Key 不能重複,一個 key 可以對應多個 value 。

下列幾點是有關於 Dictionary 的幾點特性:

  • 每個項目都是儲存在 DictionaryEntry 物件中的 Key/Value。
  • Key 必需唯一的。
  • Value 可以是 null ,而且不一定要是唯一的。
  • IDictionary 實作分為三類:唯讀、固定大小、變數大小。
    • 唯讀的 IDictionary 物件無法修改。
    • 固定大小的 IDictionary 物件不允許加入或移除項目,但允許修改現有項目。
    • 變數大小的 IDictionary 物件允許加入、移除和修改項目。

Specialized Collections

前面介紹的集合,其組成項目都是由 Object 構成,當要擷取資料項目時就會用到cast objects。

System.Collections.Specialized 命名空間底下,定義了一些僅允許特定型別的集合類別。 例如:

Generic Collections

How Generics Work

Generics簡述

Generics 是.Net2.0才加入的功能。是一種型別參數的概念,也就是當class或method在設計時,可以先擱置型別,直到用戶端程式要使用時再行處理型別。 目的在於避免run time時需要boxing/unboxing的情況。泛型可以用在.Net中的許多地方,但是最常見的就屬泛型集合類別。

2012年1月7日 星期六

檔案系統

何謂 File System Classes

System.IO 命名空間包含 FileDirectory 等類別,提供管理檔案和目錄的功能。
因為這些物件的方法是靜態 (Static) 或共用成員,所以可以直接使用它們,而不需要先建立類別的執行個體。

與檔案相關的類別,大至可分成二類:

資訊提示(Information):

資訊提示類別大都繼承自FileSystemInfo 基底類別。提供與檔案系統相關的資訊,如 FileInfoDirectoryInfo

公用程式(Utility)。

公用程式類別則提供對檔案系統的操作功能,如 FileDirectoryPath 等類別。

讀寫檔案

何謂 Stream

資料流基本概念

資料流是一種循序或隨機存取資料的方法。也就是針對 byte[] 中的資料做循序或隨機的存取。

壓縮資料流

認識 Compress Stream

.NET Framework 提供二個類別,用來處理壓縮資料。

  • GZIP:使用 GZipStream 類別表示 GZIP 資料格式,它無失真檔案壓縮和解壓縮的工業標準演算法。
  • Deflate:使用 DeflateStream 類別表示結實 (Deflate) 演算法,該演算法是無失真檔案壓縮和解壓縮的工業標準演算法。它使用 LZ77 演算法和 Huffman編碼的組合。

隔離儲存區

什麼是隔離儲存區 (Isolated Storage)

隔離儲存區是為了考量系統安全性,將應用程式限定在少許權限的區域中運作,又可以滿足程式儲存資料的需求。 意思就是該區域中的資料只有該 App 能夠存取,其他的 App 無法存取。 .NET Framework 提供了這樣子的一個儲存機制,用以將應用程式和資料產生關聯,藉以提供資料隔離和安全。 有了隔離儲存區,程式碼不再需要使用唯一的路徑去存取檔案系統中的檔案,而且資料也可進一步受到保護以避免遭受其他應用程式的影響。

隔離儲存區中的資料是依照 user 、 domain 、 assembly 來隔離的。 例如,可依使用者資訊和程式碼組件將資料隔離,限定該隔離區內資料的讀取權限僅限該程式碼,以提升這些資料的安全性,以免受到其他應用程式的影響。 這個機制常應用在ClickOnce相關程式中。