首页 > 开发 > 综合 > 正文

WEB SERVICES状态管理

2024-07-21 02:24:58
字体:
来源:转载
供稿:网友
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类
的一个实例,它能存储来自任何客户端的可访问的"名称/值"对.





发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表