WEB SERVICES狀態管理 - 中國WEB開發者網絡 (http://www.webasp.net) -- 技術教程 (http://www.webasp.net/article/) --- WEB SERVICES狀態管理 (http://www.webasp.net/article/16/15814.htm) |
| -- 作者:未知 -- 發佈日期: 2004-12-28 |
| WEB SERVICES狀態管理
在默認情況下,.NET下的WEB SERVICES是無狀態的.不過可以用ASP.NET提供的狀態管理 那就是SESSION和APPLICATION.這使得WEB SERVICES下狀態管理變得簡單了,只需使用WEBMETHOD屬性的ENABLESESSION子屬性就可[WEBMETHOD(ENABLESESSION=TRUE)] 服務端代碼如下: [WebMethod(EnableSession= true)] public client GetClientState() { cstate = (client)Session["clientstate"]; if (cstate == null) { cstate = new client(); Session["clientstate"] = cstate; } return cstate; } [WebMethod(EnableSession = true)] public void click() { client c = this.GetClientState(); c.requsest++; } } public class client { public int requsest; } 先創建一個CLIENT類,用於表示客戶端連接的次數,GetClientState()方法用於返回當前用戶的狀態. 客戶端代碼如下: partial class Form1 : Form { webstate.Service ws ; webstate.client c; public Form1() { InitializeComponent(); ws = new testwebstate.webstate.Service(); ws.CookieContainer = new System.Net.CookieContainer(); //設置COOKIE容器,以便代理對像能正確使用COOKIE來提供狀態信息 } private void button1_Click(object sender, EventArgs e) { ws.click();//每點擊一次,當前用戶的CLIENT STATE的REQUEST就++ c = ws.GetClientState();//獲取狀態信息 MessageBox.Show("you have click" + c.requsest + "times"); } } 以上的是SEESION的狀態管理,下面介紹APPLICATION. 服務端代碼如下: [WebServiceBinding(ConformanceClaims = WsiClaims.BP10, EmitConformanceClaims = true)] public class Service : System.Web.Services.WebService { ArrayList clist; [WebMethod] public string GetHistory() { StringBuilder xbuider = new StringBuilder();//要添加USING SYSTEM.TEXT; clist = (ArrayList)Application["client"]; if (clist == null) { clist = new ArrayList(); Application["client"] = clist; } foreach (client c in clist) { xbuider.Append(c.name + "" + c.request +"" + "\r\n"); } return xbuider.ToString(); } [WebMethod] public void click(ref client c)//這裡用的是傳遞對象的引用 { clist = (ArrayList)Application["client"]; if (clist == null) { clist = new ArrayList(); Application["client"] = clist; } clist.Add(c); } } public class client { public int request; public string name; } 客戶端代碼如下: partial class Form1 : Form { webstate.client c; public Form1() { InitializeComponent(); c = new testwebstate2.webstate.client(); c.name = "jisiki"; } private void button1_Click(object sender, EventArgs e) { c.request++; webstate.Service s = new testwebstate2.webstate.Service(); s.click(ref c);//這裡用的是傳遞對象的引用 this.richTextBox1.Text = s.GetHistory(); } } 對於WEB SERVICES而言,APPLICATION屬性總是可用的,APPLICATION返回HTTPAPPLICATIONSTATE類 的一個實例,它能存儲來自任何客戶端的可訪問的"名稱/值"對. |
| webasp.net |