.NET开发

本类阅读TOP10

·NHibernate快速指南(翻译)
·vs.net 2005中文版下载地址收藏
·【小技巧】一个判断session是否过期的小技巧
·VB/ASP 调用 SQL Server 的存储过程
·?dos下编译.net程序找不到csc.exe文件
·通过Web Services上传和下载文件
·学习笔记(补)《.NET框架程序设计(修订版)》--目录
·VB.NET实现DirectDraw9 (2) 动画
·VB.NET实现DirectDraw9 (1) 托管的DDraw
·建站框架规范书之——文件命名

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
WEB SERVICES状态管理

作者:未知 来源:月光软件站 加入时间:2005-2-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类
的一个实例,它能存储来自任何客户端的可访问的"名称/值"对.




相关文章

相关软件