管理WebService的狀態

2021-08-29 05:50:09 字數 2189 閱讀 5026

預設情況下,.net的webservice是無狀態的,其實要想使webservice獲得狀態管理的功能也很簡單,那就是把webmethod的屬性enablesession 設為true即可,如下例:

public class usersystem : system.web.services.webservice

else

}[webmethod(true)] //跟enablesession=true效果一樣

public string getusername()

else

return ""; }

}}上面我們在usersystem這個webservice中建了兩個webmethod,乙個用來判斷登陸,如果登陸成功則設定session[「username」]為登陸的使用者名稱,另外乙個作為試驗獲取登陸的使用者名稱。

要使web services 維護客戶端的會話狀態,無論是web客戶端還是桌面程式客戶端都必須保持cookie。客戶端可以通過在呼叫xml web services 之前建立 cookiecontainer 的新例項並將其分配給**類的cookiecontainer 屬性來接收http cookie。

客戶端的呼叫方法:

usersystem usersystem=new usersystem();

usersystem. cookiecontainer

=new

cookiecontainer();

//下面兩行用來測試,看看username能不能保持

usersystem .checklogin(

"wangerxiao","111111");

string username=usersystem.getusername();

如果在乙個專案中使用了不止乙個webservice 或者usersystem在不同的地方被例項化了多次,怎麼樣讓所有的web service狀態保持一致呢?

就像下面,如果有另外乙個web service ,裡面有個webmethod 需要確定使用者的許可權,當然這就需要先取出使用者名稱,怎麼樣得到上面的usersystem存進去的使用者名稱呢?

public class supportsystem : system.web.services.webservice

return 0; }

}}我們如果象下面這樣做

supportsystem supportsystem=new supportsystem ();

supportsystem. cookiecontainer

=new

cookiecontainer();

supportsystem.checkright(1);

跟蹤checkright的**,你會發現

session["username"]並沒有被保持下來,問題就出在這個

newcookiecontainer()上面。若需在**類例項超出範圍時維護會話狀態,客戶端必須在xml

web services 呼叫之間保持http cookie。至於怎麼樣在web services 呼叫之間保持http cookie,我們可以使用靜態成員,比如定義乙個類似下面的類

public class globalsettings

public static cookiecontainer commoncookiecontainer} }

在例項化web service **類的時候,使其實例化類的cookiecontainer成員等於這個commoncookiecontainer 就可以了 如

usersystem usersystem=new usersystem();

usersystem. cookiecontainer

=globalsettings. commoncookiecontainer;

supportsystem supportsystem=new supportsystem ();

supportsystem. cookiecontainer

=globalsettings. commoncookiecontainer;

這樣一來usersystem和supportsystem中的session 就可以保持一致了,這時候執行supportsystem.checkright(1);就可以看到其中可以使用session["username"]取到usersystem .checklogin()中存入的值了。

參見:

MCU的狀態管理

對於微控制器而言,裸驅很難監控執行狀態和資源占用,一般通過微系統實現,如ucos有任務狀態監控機制,可以通過如下配置實現 在cpu cfg.h 中 將巨集cpu cfg time meas int dis en 為1 啟用測量關中斷時間的功能,測量功能儲存任務總的關中斷時間和任務最近關中斷的時間,儲...

WebForm的狀態管理

當瀏覽器於伺服器交換資料時,可以用以下方式將資料儲存,以達到資料或狀態的訪問 list hidden field 控制項 viewstate 控制項 session 伺服器端 cookie 客戶端 cache 伺服器端 querystring 字串 list cookie是利用客戶端的瀏覽器來儲存資...

Flink的狀態管理與狀態後端

flink是乙個基於狀態計算的流計算服務。flink將所有的狀態分為兩大類 keyed state 與 operator state 所謂的keyed state指的是flink底層會給每乙個key繫結若干個型別的狀態值,特指操作 keyedstream中所涉及的狀態。所謂operator stat...