一什麼是應用程序設置
應用程序設置通常是指與應用程序密切相關的一系列參數在基於窗體的Windows應用程序中應用程序設置主要包括影響應用程序布局的位置尺寸等參數影響應用程序外觀的顏色形狀等參數此外還包括應用程序的語言文化等設置以及數據源和連接字符串等等這些參數設置在程序開發中應用廣泛有的被用來保持應用程序的一致性連續性比如保存應用程序結束時的窗體大小位置及背景顏色下次執行應用程序時恢復這些設置另一些參數則使程序代碼更加簡潔高效比如保存數據庫連接字符串供多次調用
與基於窗體的windows應用程序不完全相同基於web的Aspnet應用程序有其自身的特殊性它是面向網絡的這決定了aspnet應用程序設置除包括上面的參數外還包括
◆身份驗證和授權等安全機制
◆網絡傳輸協議類型和針對特定類型文檔的http處理程序
◆事務處理
◆為所有頁面設置超時
◆定制出錯頁面來代替默認IIS出錯頁面
◆會話和會話狀態信息
◆頁面緩存行為
◆自定義及擴展
可見aspnet 應用程序設置參數類型更為豐富實際開發中它們不僅被用來提高應用程序安全性高效性而且易於對特定用戶實施管理並可定制需求
二為什麼要將aspnet應用程序設置外置為web服務
關於web服務的優點就不用再提了媒體鋪天蓋地的宣傳和在許多領域的廣泛應用已經足夠說明問題不過這裡仍然要強調的是web服務實際上就是aspnet應用程序只不過重新進行了組織特別地web服務為不同應用程序之間共享對象提供了實現通過簡單的引用你可以在程序中訪問另一程序實現的功能而不僅僅是aspnet中那樣只有通過浏覽器才能實現顯而易見web服務也具有一般aspnet應用程序所擁有的許多功能和特性Aspnet和web服務都有狀態管理功能就是一個典型的示例
然而將aspnet應用程序設置外置為web服務有什麼優點呢?一方面可以從軟件(應用程序)可復用性方面得到答案試想一想如果客戶應用程序(源)需要使用另一應用程序(目標)的設置參數這時將目標應用程序設置配置為web服務在源應用程序中就能夠方便地調用了就像在本機配置了同樣的設置一樣另一方面web服務(aspnet應用程序應用)特殊的存儲其應用程序設置的機制(即下面將講述的webconfig文件存儲設置)使得應用程序跨平台跨internet以及應用程序的升級和xcopy部署方式成為可能
三存儲aspnet應用程序設置
我們應該已經知道基於windows應用程序的設置一般保存在注冊表中通過對注冊表寫入鍵值對保存特定相應的設置值然後通過讀取注冊表的鍵值對取出相應的設置值看來過程本身並不復雜加上Net框架為注冊表的讀寫提供了豐富的類庫支持使得操作注冊表以讀寫應用程序設置更為簡單(關於注冊表讀寫請參見專門的文章這裡就不展開了)
然而注冊表本身是個相當敏感的區域對它的讀寫不可避免地引發安全隱患即便在本地主機上操作也要相當慎重更何況置身於不可預料用戶數量的網絡環境之下就更應該在公開注冊表的讀寫操作時慎之又慎!或者干脆找別的方法替代!
正是由於這樣的原因Aspnet應用程序設置除了存儲在注冊表中外更多地通過以下兩種方式來存儲
◆Application對象
◆Webconfig文件
四使用Application對象存儲應用程序設置
對我們來說Application對象相當熟悉它是aspnet從asp中保留下來的用以簡化應用程序狀態管理的兩個對象之一(另一個是Session對象)作為一個aspnet應用程序web服務就象其他任何web應用程序一樣也能夠訪問application對象
在aspnet中application對象可視為高級語言中的全局變量它在應用程序中保持一致以實現 ASPNET 應用程序中多個會話和請求之間的全局信息共享(有必要提一下ASPNET 應用程序是單個 Web 服務器上的某個虛擬目錄及其子目錄范圍內的所有文件頁處理程序模塊和代碼的總和)
有別於普通全局變量的是aspnet應用程序狀態Application對象在客戶端第一次從某個特定的 ASPNET 應用程序虛擬目錄中請求任何 URL 資源時創建Web 服務器上的每個 ASPNET 應用程序都要創建一個單獨的實例然後通過此Application對象公開對每個實例的引用
這樣application對象適宜被用來保存需要不同用戶共享的數據記載關於應用程序的設置情況以使其能夠被運行於同一個web應用程序中的所有代碼訪問進一步將包含application對象的方法外置為web服務以在應用程序中共享對象並操作應用程序設置值有關應用程序訪問次數的狀態編程讀取遠程數據庫的互操作編程等都通過以此類似的方式來實現應用程序的設置共享
下面的代碼使用application對象記載特定應用程序的訪問次數並將方法外置為web服務供應用程序調用
[WebService(Namespace=http://wwwthjxcom)]
public class Application : SystemWebServicesWebService
{
/// <summary>
/// 返回應用程序被訪問次數
/// </summary>
[WebMethod(Description=返回特定應用程序被訪問的次數)]
public int GetAppAccessCount(string key)
{
if(Application[key]==null)
{
ApplicationLock();//鎖定Application對象以同步訪問
Application[key]=;
ApplicationUnLock();//取消鎖定
}
else
{
ApplicationLock();
Application[key]=IntParse(Application[key]ToString())+;
ApplicationUnLock();
}
return (int)Application[key];
}
}
方法GetAppAccessCount(string key)在特定應用程序被執行一次後訪問次數遞增個單位量並保存在應用程序設置變量中下一次來自任何用戶的訪問將在這個變量的基礎上遞增該設置
五使用Webcongfig文件存儲應用程序設置
從上面可以知道aspnet應用程序需要配置很多的特殊設置包括為所有頁面設置超時定制出錯頁面來代替默認IIS出錯頁面以及安全設置和授權級別設置等看上去這麼多類型的設置一定很麻煩幸運地是aspnet結束了需要進行手工配置的歷史那就是將設置保存在Webconfig文件中這是不同於此前提到的使用注冊表或application對象保存應用程序設置的另一種保存應用程序設置的方法由於webconfig文件存在於應用程序根目錄下以這種方式保存的應用程序設置將使應用程序跨平台使用和伸縮性大大增強
使用webconfig文件存儲應用程序設置有很多優點webconfig實際上是一個純文本文件顯然存儲在純文本文件中的配置信息非常容易修改而且不象傳統的asp任何對配置設置的修改不需要重新啟動web服務器就可以立即應用於當前的web應用程序同時設置好的配置被自動應用於當前文件夾和它所有的子文件夾使真正兼容主機的xcopy成為可能我們只需要復制另一個IIS虛擬目錄中的所有web應用程序文件即可實現應用程序部署另外一些特定任務的配置如基於表單的授權只有通過使用webconfig文件才能實現
這裡有必要簡要說說webconfig文件的構造webconfig文件是標准的xml文件遵循格式正確的xml文檔的所有規范它包括多個部分每一部分處理一個特殊的任務webconfig文件由許多小節組成包括驗證小節安全性小節錯誤處理小節和web服務小節並以鍵值對的形式保存應用程序配置信息
作為標准的xml文檔webconfig文件的根元素是<configuration>它包含一個子元素<systemweb>而後者又包括許多配置部分Webconfig文件包含許多標記每一個標記對應一個所謂的部分(section)如表示身份驗證的Authentication表示授權的Authorization定制錯誤的CustomErrors會話設置SessionState等等
盡管webconfig文件為用戶自定義提供了很大的空間我們可能仍然需要一些用戶設置appSettings部分就是用來滿足這項要求的請記住這部分並不在<systemweb ></systemweb>標記中而是單獨存放在<configuration></configuration>標記中數據庫連接字符串email服務器地址和日志文件存放路徑通常頁可以放在這部分
下面的代碼片段是一個webconfig文件的設置小節該小節定義了應用程序設置即appSettings小節它包含了數據庫連接字符串和另一個用戶設置LogFilePath鍵值對
<configuration>
<appSettings>
<add key=Conn value=server=(local);uid=sa;pwd=;database=myDB />
<add key=logFilePath value=c:\mylogs />
</appSettings>
</configuration>
Net框架支持aspnet應用程序訪問應用程序設置其ConfigurationSettings 類提供對指定配置小節中配置設置的訪問該類的公共屬性ConfigurationSettingsAppSettings 屬性可獲取 <appSettings> 元素配置節中的配置設置該屬性是一個NameValueCollection它包含配置設置的名稱/值對
public static NameValueCollectionAppSettings {get;}
下面的web服務方法用於獲取應用程序配置設置using SystemConfiguration;
[WebMethod]
public string GetAppSetting(string key)
{
return ConfigurationSettingsAppSettings[key];
}
注意AppSetting屬性是只讀的要想修改應用程序設置必須編輯webconfig文件同時如果key鍵並不存在於webconfig文件中讀取AppSettings屬性將引發錯誤
ConfigurationSettings 類還提供了一個公共方法ConfigurationSettingsGetConfig 用於返回用戶定義的配置節的配置設置
public static object GetConfig(string sectionName);
其中參數sectionName 表示要讀取的配置節下面的web服務方法用於獲取用戶定義配置的指定鍵值
[WebMethod]
public string GetConfig(string key)
{
NameValueCollection nv=new NameValueCollection();
//實例化NameValueCollection 類對象
nv=(NameValueCollection)ConfigurationSettingsGetConfig(appSettings);
//返回用戶定義的配置節的設置
return nv[key]ToString();
//返回特定鍵值
}
六消費實現aspnet應用程序設置的web服務
你可以編寫 Web應用程序Windows桌面應用程序或Web服務等應用程序來消費已經創建的應用程序設置web服務實現方式同任何標准的web服務一樣沒有什麼特別之處應該說很簡單這裡就不展開講解了
七參考資料
◆《Professional Xml For Net Developers》
◆《Professional Aspnet Web Services》
From:http://tw.wingwit.com/Article/program/net/201311/15706.html