QQ咨询 官方微信

添加微信好友

官方小程序

百度小程序

微信小程序

头条小程序

关于我们

asp.net基础

在asp.net webservice中如何使用session

 admin  2015-05-25 22:53:29

在使用asp.net编写webservice时,默认情况下是不支持session的,但我们可以把WebMethod的EnableSession选项设为true来显式的打开它,请看以下例子:
1 新建网站WebSite
2 新建web服务WebService.asmx,它具有以下两个方法:

C#-Code:

  1. [WebMethod(EnableSession = true)] 
  2. public string Login(string name) 
  3.     Context.Session["name"] = name; 
  4.     return name; 
  5. }  
  6.  
  7.  
  8. [WebMethod(EnableSession = true)] 
  9. public string GetName() 
  10.     if (Context.Session["name"] != null) 
  11.         return Context.Session["name"].ToString(); 
  12.     else 
  13.         return ""; 

3 添加asp.net页面SessionInWebservice.aspx

ASP.NET-Code:

  1. <form id="form1" runat="server"> 
  2.     <div> 
  3.         <asp:TextBox ID="txtName" runat="server"></asp:TextBox> 
  4.         <asp:Button ID="btnLogin" runat="server"  
  5.             Text="Login" OnClick="btnLogin_Click" /> 
  6.     </div> 
  7.     <div> 
  8.         <asp:Button ID="btnGetName" runat="server"  
  9.             Text="GetName" OnClick="btnGetName_Click" /> 
  10.         <asp:Label ID="lblName" runat="server" Text="Label"></asp:Label> 
  11.     </div> 
  12. </form> 

 SessionInWebservice.aspx.cs

 C#-Code:

  1. protected void btnLogin_Click(object sender, EventArgs e) 
  2.     WebService ws = new WebService(); 
  3.      
  4.     ws.Login(txtName.Text); 
  5. protected void btnGetName_Click(object sender, EventArgs e) 
  6.     WebService ws = new WebService(); 
  7.     lblName.Text = ws.GetName(); 

 问题似乎到此结束了,按Login按钮记录用户名以后,再按GetName就可以获取到刚才输入的名字。
但如果我们另外新建一个website,并添加web引用来调用刚才编写的webservice,问题就出来了,GeName方法并没有获取到我们刚才登录的用户名(如果是在winform中调用该方法,也会出现同样的问题)。莫非这个方法行不通了?
其实不然,我们给该WebService的CookieContainer赋值就可以了,修改SessionInWebservice.aspx.cs 的代码:
C#-Code:

  1. private static System.Net.CookieContainer cookieContainer  
  2.     = new System.Net.CookieContainer();  
  3.  
  4.  
  5. protected void btnLogin_Click(object sender, EventArgs e) 
  6.     localhost.WebService ws = new localhost.WebService(); 
  7.     ws.CookieContainer = cookieContainer
  8.     ws.Login(txtName.Text); 
  9. protected void btnGetName_Click(object sender, EventArgs e) 
  10.     localhost.WebService ws = new localhost.WebService(); 
  11.     ws.CookieContainer = cookieContainer
  12.     lblName.Text = ws.GetName(); 

 请注意:Login方法和GetName方法必须指定同一个CookieContainer,因此在这里我们使用了静态变量。
但如果是在不同的页面中调用该webservice,问题依旧存在,因此我们需要重新修改代码,通过编写新类继承上面的webservice,并给CookieContainer赋值就可以解决该问题了:
C#-Code:

  1. public class WebService1:localhost.WebService 
  2.     private static System.Net.CookieContainer cookieContainer; 
  3.  
  4.  
  5.     static WebService1() 
  6.     { 
  7.         cookieContainer = new System.Net.CookieContainer(); 
  8.     } 
  9.  
  10.  
  11.     public WebService1() 
  12.     { 
  13.         this.CookieContainer = cookieContainer
  14.     } 

调用的时候也不需要重新给CookieContainer赋值了:
C#-Code:

  1. protected void btnLogin_Click(object sender, EventArgs e) 
  2.     WebService1 ws = new WebService1(); 
  3.     ws.Login(txtName.Text); 
  4. protected void btnGetName_Click(object sender, EventArgs e) 
  5.     WebService1 ws = new WebService1(); 
  6.     lblName.Text = ws.GetName(); 
¥ 打赏
×
如果您觉得文章帮助了您就打赏一下吧
非常感谢你的打赏,我们将继续分享更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

本文《在asp.net webservice中如何使用session》发布于石头博客文章,作者:admin,如若转载,请注明出处:https://www.pweb123.com/html/aspnet/196.html,否则禁止转载,谢谢配合!

文章点评

我来说两句 已有0条评论
点击图片更换

添加微信好友

添加微信好友

微信小程序

百度小程序