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