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

首頁 > 編程 > .NET > 正文

ASP.NET 的狀態(tài)管理

2024-07-10 12:55:47
字體:
來源:轉載
供稿:網(wǎng)友
  • 本文來源于網(wǎng)頁設計愛好者web開發(fā)社區(qū)http://www.html.org.cn收集整理,歡迎訪問。
  • web form 網(wǎng)頁是基于http的,它們沒有狀態(tài), 這意味著它們不知道所有的請求是否來自
    同一臺客戶端計算機,網(wǎng)頁是受到了破壞,以及是否得到了刷新,這樣就可能造成信息的
    丟失。 于是, 狀態(tài)管理就成了開發(fā)網(wǎng)絡應用程序的一個實實在在的問題。
        在asp中能夠通過cookie 、查詢字符串、 應用程序、會話(session) 等輕易解決這些問題。
    現(xiàn)在在asp.net環(huán)境中,我們依然可以使用這些功能,并且功能更加強大。
      狀態(tài)管理分為服務端和客戶端兩種情況, 這里只是介紹 服務端狀態(tài)管理:

       與application對象不同的是, asp.net 的session對象可以在iis服務器或者工作進程重新啟動時
    恢復啟動前的狀態(tài)而不丟失其中的數(shù)據(jù)。這是因為存儲在session中的所以信息都缺省的存儲在
    一個作為windows服務運行的狀態(tài)服務器進程中。狀態(tài)可以被序列化并以二進制形式保存在內存中。
    程序員可以懸著使用microsoft sql server數(shù)據(jù)庫來存儲數(shù)據(jù)。

     狀態(tài)服務器服務和狀態(tài)信息可以和web應用程序一起存在于同一臺服務器上,也可以保存到外部的
    狀態(tài)服務器上。 為了指定如何存儲信息,程序員可以在web.config文件中編寫適當?shù)呐渲谩?/p>

      asp.net會話狀態(tài)模塊在web.config文件中<system.web>標記下的<sessionstate>標記的mode屬性來決定
    該屬性的四種可能的值: off、 inproc stateserver 和sqlserver。
      
     1  inproc是缺省的設置
     
    它允許“無cookie”的會話,以及在服務器之外存儲
    會話數(shù)據(jù)。asp.net會話狀態(tài)模塊在web.config文件中像下面這樣配置:

    <sessionstate mode="inproc" cookieless="false" timeout="20" />

    在這個例子中,mode屬性設為inproc(默認值),表明會話狀態(tài)要由asp.net存儲到內存中,而且
    不用cookie來傳遞會話id。相反,會話id要直接插入一個網(wǎng)頁url的查詢字符串中。例如,采用
    inproc模式并建立一個會話之后,調用一個假想的asp.net網(wǎng)頁時,需要采用下面這樣的url:

    http://my.website.com/(12mfju55vgblubjlwsi4dgjq)/education.aspx

    圓括號中長長的字母、數(shù)字字符串就是會話id。asp.net引擎從查詢字符中提取會話id,并將用戶
    請求與特定會話聯(lián)系起來。采取這種方式,不管cookie還是隱藏表單字段都用不著了。
    所以,即使網(wǎng)頁中沒有使用表單,也能加入會話。

      但是這種方法,應用程序的狀態(tài)將依賴于 asp.net進程, 當iis進程崩潰或者正常重啟時,保存在
    進程中的狀態(tài)將丟失。


     2 mode屬性設為off
     
       和從前的asp一樣,asp.net的會話狀態(tài)管理是要產(chǎn)生開銷的。所以,假如某個網(wǎng)頁不需要訪問
    session對象,開發(fā)者應將那個頁的page預編譯指令的enablesessionstate屬性設為false。
    要為整個網(wǎng)站禁用會話狀態(tài),可在web.config文件中將sessionstate元素的mode屬性設為off。

       為了克服inproc 模式的缺點, asp.net 提供了兩種進程外保存會話狀態(tài)的方法。

     3 stateserver會話管理

      將mode屬性設為stateserver,也就是將會話數(shù)據(jù)存儲到單獨的內存緩沖區(qū)中,再由單獨一臺機器上運行

    的windows服務來控制這個緩沖區(qū)。狀態(tài)服務全稱是“asp.net state service ”(aspnet_state.exe),

    它由web.config文件中的stateconnectionstring屬性來配置。該屬性指定了服務所在的服務器,以及要監(jiān)

    視的端口:
    <sessionstate mode="stateserver"
        stateconnectionstring="tcpip=myserver:42424"
        cookieless="false" timeout="20" />
      
     在這個例子中,狀態(tài)服務在一臺名為myserver的機器的42424端口(默認端口)運行。要在服務器上改變

    端口,可編輯hklm/system/currentcontrolset/services/aspnet_state注冊表項中的port值。
     
    顯然,使用狀態(tài)服務的優(yōu)點在于進程隔離,并可在web farm中共享。 使用這種模式,會話狀態(tài)的存儲將不

    依賴于iis進程的失敗或者重啟,然而,一旦狀態(tài)服務中止,所有會話數(shù)據(jù)都會丟失。換言之,狀態(tài)服務不

    像sql server那樣能持久存儲數(shù)據(jù);它只是將數(shù)據(jù)存儲在內存中。


     4  用sql server進行會話管理
     
       asp.net還允許將會話數(shù)據(jù)存儲到一個數(shù)據(jù)庫服務器中,方法是將mode屬性變成sqlserver。
    在這種情況下,asp.net嘗試將會話數(shù)據(jù)存儲到由sqlconnectionstring屬性(其中包含數(shù)據(jù)源以及登錄服

    務器所需的安全憑證)指定的sql server中。
    為了用恰當?shù)臄?shù)據(jù)庫對象來配置sql erver,管理員還需要創(chuàng)建aspstate數(shù)據(jù)庫,
    方法是運行windir/microsoft.net/framework/version文件夾中的installstate.sql腳本(windir是服務

    器的windows文件夾,而version是你使用的.net框架版本的安裝文件夾)。
    要配置sql服務器,可以在命令行中運行sql server 提供的命令行工具osql.exe

    osql -s [ server name] -u [user] -p [password] <installsqlstate.sql
    例如
    osql -s (local)/netsdk -u sa -p "" -i installsqlstate.sql

      在這里用戶名必須是sql服務器上的sa帳號,或者具有同等權限的其他帳號。有興趣的讀者可以打開
    這個腳本文件來了解asp.net是如何和sql server配合實現(xiàn)狀態(tài)管理的。
     
       卸載這些表和存儲過程,可以使用uninstallsqlstate.sql腳本,使用方法與上面類似。

    做好必要的數(shù)據(jù)庫準備工作后,將web.config 文件中的sessionstate 元素的mode改為"sqlserver"
    ,并且指定sql連接字符串。具體如下:

     mode="sqlserver"
     sqlconnectionstring="data source=127.0.0.1; userid=sa; password="

    配置好sql server后,應用程序代碼運行時就和inproc模式?jīng)]有什么區(qū)別。但要注意的是,由于數(shù)據(jù)不存

    儲在本地內存,所以存儲會話狀態(tài)的對象需要進行序列化和反序列化,以便通過網(wǎng)絡傳給數(shù)據(jù)庫服務器,

    以及從數(shù)據(jù)庫服務器傳回。這當然會影響性能。通過在數(shù)據(jù)庫中存儲會話狀態(tài),可分別針對擴展性及可靠

    性來有效地平衡性能。另外,可以利用sql server的集群,使狀態(tài)存儲不依賴于單個的sql server, 這樣就可以為應用程序提供極大限度的可靠性。

    發(fā)表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發(fā)表
    主站蜘蛛池模板: 北川| 佛坪县| 高州市| 平南县| 阿克苏市| 丽水市| 曲阜市| 滕州市| 鄂州市| 康定县| 闽清县| 武冈市| 同心县| 茌平县| 滦平县| 交城县| 清涧县| 吴忠市| 望城县| 西贡区| 神池县| 炉霍县| 内江市| 自治县| 乐清市| 略阳县| 恩施市| 浪卡子县| 弋阳县| 和静县| 武隆县| 九龙城区| 武穴市| 石台县| 玉山县| 台中县| 鸡西市| 济源市| 阜新| 清丰县| 丽水市|