国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

為Asp.net應(yīng)用程序設(shè)置構(gòu)建Web服務(wù)

2024-07-10 12:55:53
字體:
供稿:網(wǎng)友


一、什么是應(yīng)用程序設(shè)置

  應(yīng)用程序設(shè)置通常是指與應(yīng)用程序密切相關(guān)的一系列參數(shù)。在基于窗體的windows應(yīng)用程序中,應(yīng)用程序設(shè)置主要包括影響應(yīng)用程序布局的位置、尺寸等參數(shù);影響應(yīng)用程序外觀的顏色、形狀等參數(shù);此外,還包括應(yīng)用程序的語言、文化等設(shè)置以及數(shù)據(jù)源和連接字符串等等。這些參數(shù)設(shè)置在程序開發(fā)中應(yīng)用廣泛,有的被用來保持應(yīng)用程序的一致性、連續(xù)性,比如保存應(yīng)用程序結(jié)束時(shí)的窗體大小、位置及背景顏色,下次執(zhí)行應(yīng)用程序時(shí)恢復(fù)這些設(shè)置;另一些參數(shù)則使程序代碼更加簡潔高效,比如保存數(shù)據(jù)庫連接字符串供多次調(diào)用。

  與基于窗體的windows應(yīng)用程序不完全相同,基于web的asp.net應(yīng)用程序有其自身的特殊性,它是面向網(wǎng)絡(luò)的。這決定了asp.net應(yīng)用程序設(shè)置除包括上面的參數(shù)外,還包括,

   # 身份驗(yàn)證和授權(quán)等安全機(jī)制

   # 網(wǎng)絡(luò)傳輸協(xié)議類型和針對特定類型文檔的http處理程序

  # 事務(wù)處理

  # 為所有頁面設(shè)置超時(shí)

  # 定制出錯(cuò)頁面來代替默認(rèn)iis出錯(cuò)頁面

  # 會(huì)話和會(huì)話狀態(tài)信息

  # 頁面緩存行為

  # 自定義及擴(kuò)展

  可見,asp.net 應(yīng)用程序設(shè)置參數(shù)類型更為豐富。實(shí)際開發(fā)中,它們不僅被用來提高應(yīng)用程序安全性、高效性,而且易于對特定用戶實(shí)施管理并可定制需求。

  二、為什么要將asp.net應(yīng)用程序設(shè)置外置為web服務(wù)

  關(guān)于web服務(wù)的優(yōu)點(diǎn)就不用再提了,媒體鋪天蓋地的宣傳和在許多領(lǐng)域的廣泛應(yīng)用已經(jīng)足夠說明問題。不過這里仍然要強(qiáng)調(diào)的是,web服務(wù)實(shí)際上就是asp.net應(yīng)用程序,只不過重新進(jìn)行了組織。特別地,web服務(wù)為不同應(yīng)用程序之間共享對象提供了實(shí)現(xiàn)。通過簡單的引用,你可以在程序中訪問另一程序?qū)崿F(xiàn)的功能,而不僅僅是asp.net中那樣只有通過瀏覽器才能實(shí)現(xiàn)。顯而易見,web服務(wù)也具有一般asp.net應(yīng)用程序所擁有的許多功能和特性。asp.net和web服務(wù)都有狀態(tài)管理功能就是一個(gè)典型的示例。

  然而,將asp.net應(yīng)用程序設(shè)置外置為web服務(wù)有什么優(yōu)點(diǎn)呢?一方面可以從軟件(應(yīng)用程序)可復(fù)用性方面得到答案,試想一想,如果客戶應(yīng)用程序(源)需要使用另一應(yīng)用程序(目標(biāo))的設(shè)置參數(shù),這時(shí),將目標(biāo)應(yīng)用程序設(shè)置配置為web服務(wù),在源應(yīng)用程序中就能夠方便地調(diào)用了,就像在本機(jī)配置了同樣的設(shè)置一樣。另一方面,web服務(wù)(asp.net應(yīng)用程序應(yīng)用)特殊的存儲(chǔ)其應(yīng)用程序設(shè)置的機(jī)制(即下面將講述的web.config文件存儲(chǔ)設(shè)置)使得應(yīng)用程序跨平臺、跨internet以及應(yīng)用程序的升級和xcopy部署方式成為可能。

  三、存儲(chǔ)asp.net應(yīng)用程序設(shè)置

  我們應(yīng)該已經(jīng)知道,基于windows應(yīng)用程序的設(shè)置一般保存在注冊表中。通過對注冊表寫入"鍵值對",保存特定相應(yīng)的設(shè)置值。然后,通過讀取注冊表的"鍵值對",取出相應(yīng)的設(shè)置值??磥?,過程本身并不復(fù)雜,加上.net框架為注冊表的讀寫提供了豐富的類庫支持,使得操作注冊表以讀寫應(yīng)用程序設(shè)置更為簡單(關(guān)于注冊表讀寫請參見專門的文章,這里就不展開了)。

  然而,注冊表本身是個(gè)相當(dāng)敏感的區(qū)域,對它的讀寫不可避免地引發(fā)安全隱患,即便在本地主機(jī)上操作也要相當(dāng)慎重,更何況置身于不可預(yù)料用戶數(shù)量的網(wǎng)絡(luò)環(huán)境之下,就更應(yīng)該在公開注冊表的讀寫操作時(shí)慎之又慎!或者,干脆找別的方法替代!

  正是由于這樣的原因,asp.net應(yīng)用程序設(shè)置除了存儲(chǔ)在注冊表中外,更多地,通過以下兩種方式來存儲(chǔ):

    # application對象

    # web.config文件

  四、使用application對象存儲(chǔ)應(yīng)用程序設(shè)置

  對我們來說,application對象相當(dāng)熟悉。它是asp.net從asp中保留下來的、用以簡化應(yīng)用程序狀態(tài)管理的兩個(gè)對象之一(另一個(gè)是session對象)。作為一個(gè)asp.net應(yīng)用程序,web服務(wù)就象其他任何web應(yīng)用程序一樣,也能夠訪問application對象。

  在asp.net中,application對象可視為高級語言中的全局變量。它在應(yīng)用程序中保持一致,以實(shí)現(xiàn) asp.net 應(yīng)用程序中多個(gè)會(huì)話和請求之間的全局信息共享。(有必要提一下,asp.net 應(yīng)用程序是單個(gè) web 服務(wù)器上的某個(gè)虛擬目錄及其子目錄范圍內(nèi)的所有文件、頁、處理程序、模塊和代碼的總和。)

有別于普通全局變量的是,asp.net應(yīng)用程序狀態(tài)application對象在客戶端第一次從某個(gè)特定的 asp.net 應(yīng)用程序虛擬目錄中請求任何 url 資源時(shí)創(chuàng)建。web 服務(wù)器上的每個(gè) asp.net 應(yīng)用程序都要?jiǎng)?chuàng)建一個(gè)單獨(dú)的實(shí)例。然后通過此application對象公開對每個(gè)實(shí)例的引用。

  這樣,application對象適宜被用來保存需要不同用戶共享的數(shù)據(jù),記載關(guān)于應(yīng)用程序的設(shè)置情況,以使其能夠被運(yùn)行于同一個(gè)web應(yīng)用程序中的所有代碼訪問,進(jìn)一步,將包含application對象的方法外置為web服務(wù),以在應(yīng)用程序中共享對象并操作應(yīng)用程序設(shè)置值。有關(guān)應(yīng)用程序訪問次數(shù)的狀態(tài)編程,讀取遠(yuǎn)程數(shù)據(jù)庫的互操作編程等都通過以此類似的方式來實(shí)現(xiàn)應(yīng)用程序的設(shè)置共享。

  下面的代碼使用application對象,記載特定應(yīng)用程序的訪問次數(shù),并將方法外置為web服務(wù)供應(yīng)用程序調(diào)用:

[webservice(namespace="http://www.thjx.com")]
public class application : system.web.services.webservice
{
  /// <summary>
  /// 返回應(yīng)用程序被訪問次數(shù)
  /// </summary>
  [webmethod(description="返回特定應(yīng)用程序被訪問的次數(shù)")]
  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)在特定應(yīng)用程序被執(zhí)行一次后訪問次數(shù)遞增1個(gè)單位量,并保存在應(yīng)用程序設(shè)置變量中,下一次來自任何用戶的訪問將在這個(gè)變量的基礎(chǔ)上遞增該設(shè)置。

  五、使用web.congfig文件存儲(chǔ)應(yīng)用程序設(shè)置

  從上面可以知道,asp.net應(yīng)用程序需要配置很多的特殊設(shè)置,包括為所有頁面設(shè)置超時(shí)、定制出錯(cuò)頁面來代替默認(rèn)iis出錯(cuò)頁面以及安全設(shè)置和授權(quán)級別設(shè)置等。看上去,這么多類型的設(shè)置一定很麻煩,幸運(yùn)地是,asp.net結(jié)束了需要進(jìn)行手工配置的歷史,那就是將設(shè)置保存在web.config文件中。這是不同于此前提到的使用注冊表或application對象保存應(yīng)用程序設(shè)置的另一種保存應(yīng)用程序設(shè)置的方法。由于web.config文件存在于應(yīng)用程序根目錄下,以這種方式保存的應(yīng)用程序設(shè)置將使應(yīng)用程序跨平臺使用和伸縮性大大增強(qiáng)。

  使用web.config文件存儲(chǔ)應(yīng)用程序設(shè)置有很多優(yōu)點(diǎn),web.config實(shí)際上是一個(gè)純文本文件,顯然,存儲(chǔ)在純文本文件中的配置信息非常容易修改,而且,不象傳統(tǒng)的asp,任何對配置設(shè)置的修改不需要重新啟動(dòng)web服務(wù)器,就可以立即應(yīng)用于當(dāng)前的web應(yīng)用程序;同時(shí),設(shè)置好的配置被自動(dòng)應(yīng)用于當(dāng)前文件夾和它所有的子文件夾,使真正兼容主機(jī)的xcopy成為可能,我們只需要復(fù)制另一個(gè)iis虛擬目錄中的所有web應(yīng)用程序文件即可實(shí)現(xiàn)應(yīng)用程序部署;另外,一些特定任務(wù)的配置如基于表單的授權(quán)只有通過使用web.config文件才能實(shí)現(xiàn)。

  這里,有必要簡要說說web.config文件的構(gòu)造。web.config文件是標(biāo)準(zhǔn)的xml文件,遵循格式正確的xml文檔的所有規(guī)范。它包括多個(gè)部分,每一部分處理一個(gè)特殊的任務(wù)。web.config文件由許多小節(jié)組成,包括驗(yàn)證小節(jié)、安全性小節(jié)、錯(cuò)誤處理小節(jié)和web服務(wù)小節(jié)。并以鍵值對的形式保存應(yīng)用程序配置信息。

  作為標(biāo)準(zhǔn)的xml文檔,web.config文件的根元素是<configuration>,它包含一個(gè)子元素<system.web>,而后者又包括許多配置部分。web.config文件包含許多標(biāo)記,每一個(gè)標(biāo)記對應(yīng)一個(gè)所謂的"部分(section)"。如,表示身份驗(yàn)證的authentication、表示授權(quán)的authorization、定制錯(cuò)誤的customerrors、會(huì)話設(shè)置sessionstate等等。

  盡管web.config文件為用戶自定義提供了很大的空間,我們可能仍然需要一些用戶設(shè)置。appsettings部分就是用來滿足這項(xiàng)要求的,請記住這部分并不在<system.web ></system.web>標(biāo)記中,而是單獨(dú)存放在<configuration></configuration>標(biāo)記中,數(shù)據(jù)庫連接字符串、email服務(wù)器地址和日志文件存放路徑,通常頁可以放在這部分。

  下面的代碼片段是一個(gè)web.config文件的設(shè)置小節(jié),該小節(jié)定義了應(yīng)用程序設(shè)置,即appsettings小節(jié),它包含了數(shù)據(jù)庫連接字符串和另一個(gè)用戶設(shè)置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應(yīng)用程序訪問應(yīng)用程序設(shè)置。其configurationsettings 類提供對指定配置小節(jié)中配置設(shè)置的訪問。該類的公共屬性configurationsettings.appsettings 屬性可獲取 <appsettings> 元素配置節(jié)中的配置設(shè)置,該屬性是一個(gè)namevaluecollection,它包含配置設(shè)置的名稱/值對:

public static namevaluecollection.appsettings {get;}



  下面的web服務(wù)方法用于獲取應(yīng)用程序配置設(shè)置:using system.configuration;

[webmethod]
public string getappsetting(string key)
{
return configurationsettings.appsettings[key];
}



  注意,appsetting屬性是只讀的,要想修改應(yīng)用程序設(shè)置,必須編輯web.config文件。同時(shí),如果key鍵并不存在于web.config文件中,讀取appsettings屬性將引發(fā)錯(cuò)誤。

  configurationsettings 類還提供了一個(gè)公共方法configurationsettings.getconfig 用于返回用戶定義的配置節(jié)的配置設(shè)置。

public static object getconfig(string sectionname);



  其中,參數(shù)sectionname 表示要讀取的配置節(jié)。下面的web服務(wù)方法用于獲取用戶定義配置的指定鍵值:

[webmethod]
public string getconfig(string key)
{
namevaluecollection nv=new namevaluecollection();
//實(shí)例化namevaluecollection 類對象
nv=(namevaluecollection)configurationsettings.getconfig("appsettings");
//返回用戶定義的配置節(jié)的設(shè)置
return nv[key].tostring();
//返回特定鍵值
}



  六、消費(fèi)"實(shí)現(xiàn)asp.net應(yīng)用程序設(shè)置的web服務(wù)"

  你可以編寫 web應(yīng)用程序、windows桌面應(yīng)用程序或web服務(wù)等應(yīng)用程序來消費(fèi)已經(jīng)創(chuàng)建的應(yīng)用程序設(shè)置web服務(wù)。實(shí)現(xiàn)方式同任何標(biāo)準(zhǔn)的web服務(wù)一樣,沒有什么特別之處,應(yīng)該說很簡單,這里就不展開講解了。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 彭水| 耒阳市| 正宁县| 延吉市| 容城县| 连云港市| 师宗县| 嘉善县| 浏阳市| 巧家县| 梓潼县| 察雅县| 长丰县| 平和县| 梁平县| 郴州市| 绥滨县| 湖北省| 沁水县| 社会| 平顶山市| 伊宁县| 依安县| 桐乡市| 封丘县| 施秉县| 临夏县| 宁阳县| 万安县| 平和县| 云和县| 天峻县| 越西县| 泰安市| 广州市| 西藏| 壶关县| 乐陵市| 灵山县| 道真| 金乡县|