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. { 
  4.     Context.Session["name"] = name; 
  5.     return name; 
  6. }  
  7.  
  8.  
  9. [WebMethod(EnableSession = true)] 
  10. public string GetName() 
  11. { 
  12.     if (Context.Session["name"] != null) 
  13.         return Context.Session["name"].ToString(); 
  14.     else 
  15.         return ""; 
  16. } 

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. { 
  3.     WebService ws = new WebService(); 
  4.      
  5.     ws.Login(txtName.Text); 
  6. } 
  7. protected void btnGetName_Click(object sender, EventArgs e) 
  8. { 
  9.     WebService ws = new WebService(); 
  10.     lblName.Text = ws.GetName(); 
  11. } 

 问题似乎到此结束了,按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. { 
  7.     localhost.WebService ws = new localhost.WebService(); 
  8.     ws.CookieContainer = cookieContainer; 
  9.     ws.Login(txtName.Text); 
  10. } 
  11. protected void btnGetName_Click(object sender, EventArgs e) 
  12. { 
  13.     localhost.WebService ws = new localhost.WebService(); 
  14.     ws.CookieContainer = cookieContainer; 
  15.     lblName.Text = ws.GetName(); 
  16. } 

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

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

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

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

支付宝扫一扫打赏

微信扫一扫打赏

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

文章点评

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

添加微信好友

添加微信好友

微信小程序

百度小程序