WEB SERVICES狀態(tài)管理
2024-07-21 02:24:58
供稿:網(wǎng)友
web services狀態(tài)管理
在默認(rèn)情況下,.net下的web services是無(wú)狀態(tài)的.不過(guò)可以用asp.net提供的狀態(tài)管理
那就是session和application.這使得web services下?tīng)顟B(tài)管理變得簡(jiǎn)單了,只需使用webmethod屬性的enablesession子屬性就可[webmethod(enablesession=true)]
服務(wù)端代碼如下:
[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;
}
先創(chuàng)建一個(gè)client類,用于表示客戶端連接的次數(shù),getclientstate()方法用于返回當(dāng)前用戶的狀態(tài).
客戶端代碼如下:
partial class form1 : form
{
webstate.service ws ;
webstate.client c;
public form1()
{
initializecomponent();
ws = new testwebstate.webstate.service();
ws.cookiecontainer = new system.net.cookiecontainer();
//設(shè)置cookie容器,以便代理對(duì)象能正確使用cookie來(lái)提供狀態(tài)信息
}
private void button1_click(object sender, eventargs e)
{
ws.click();//每點(diǎn)擊一次,當(dāng)前用戶的client state的request就++
c = ws.getclientstate();//獲取狀態(tài)信息
messagebox.show("you have click" + c.requsest + "times");
}
}
以上的是seesion的狀態(tài)管理,下面介紹application.
服務(wù)端代碼如下:
[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)//這里用的是傳遞對(duì)象的引用
{
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);//這里用的是傳遞對(duì)象的引用
this.richtextbox1.text = s.gethistory();
}
}
對(duì)于web services而言,application屬性總是可用的,application返回httpapplicationstate類
的一個(gè)實(shí)例,它能存儲(chǔ)來(lái)自任何客戶端的可訪問(wèn)的"名稱/值"對(duì).