共计 2945 个字符,预计需要花费 8 分钟才能阅读完成。
这篇文章主要讲解了“Web Service 中 session 和 cookie 如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“Web Service 中 session 和 cookie 如何使用”吧!
一、要在 webservice 中使用 session,需要以下几点要求:
1. 在服务端的方法中加入 [WebMethod(EnableSession=true)] 修饰方法;
2. 在客户端,要在实例化了 webservice 代理类之后,要为它的 CookieContainer 实例化一个 new CookieContainer();
这样才能使用 session 存储状态。
3. 另外在多个 webservice 代理中,只要含有相同的 cookie, 就能共用相同的 session,其中的 cookie 通过代理类的 CookieContainer.GetCookies(new Uri(s.Url))[ASP.NET_SessionId]取得,如果其他的 webserivce 代理类需要用相同的 session 则可以用 CookieContainer.Add 方法,将取得的 cookie 加入即可。
二、如果只想使用 cookie,则只需要在客户端做设置就可以,服务器端不需要像 session 一样加入属性修饰。
另外 webmethod 只用于 public 的成员方法,不用于 static 的,虽然不报错,但在客户端代理类中是找不到 static 方法的。
在使用 asp.net 编写 webservice 时,默认情况下是不支持 session 的,但我们可以把 WebMethod 的 EnableSession 选项设为 true 来显式的打开它,请看以下例子:
1 新建网站 WebSite
2 新建 web 服务 WebService.asmx,它具有以下两个方法:
[WebMethod(EnableSession = true)]
public string Login(string name)
Context.Session[name] = name;
return name;
}
[WebMethod(EnableSession = true)]
public string GetName()
if (Context.Session[ name] != null)
return Context.Session[name].ToString();
return
}
3 添加 asp.net 页面 SessionInWebservice.aspx
asp:button id= btnLogin p= = runat= server
Text= Login quot;btnLogin_Click /
asp:button id= btnGetName p= = runat= server
Text= GetName quot;btnGetName_Click /
SessionInWebservice.aspx.cs
protected void btnLogin_Click(object sender, EventArgs e)
WebService ws = new WebService();
ws.Login(txtName.Text);
protected void btnGetName_Click(object sender, EventArgs e)
WebService ws = new WebService();
lblName.Text = ws.GetName();}
问题似乎到此结束了,按 Login 按钮记录用户名以后,再按 GetName 就可以获取到刚才输入的名字。
但如果我们另外新建一个 website,并添加 web 引用来调用刚才编写的 Web Service,问题就出来了,GeName 方法并没有获取到我们刚才登录的用户名(如果是在 winform 中调用该方法,也会出现同样的问题)。莫非这个方法行不通了?
其实不然,我们给该 WebService 的 CookieContainer 赋值就可以了,修改 SessionInWebservice.aspx.cs 的代码:
private static System.Net.CookieContainer cookieContainer
= new System.Net.CookieContainer();
protected void btnLogin_Click(object sender, EventArgs e)
localhost.WebService ws = new localhost.WebService();
ws.CookieContainer = cookieContainer;
ws.Login(txtName.Text);
protected void btnGetName_Click(object sender, EventArgs e)
localhost.WebService ws = new localhost.WebService();
ws.CookieContainer = cookieContainer;
lblName.Text = ws.GetName();}
请注意:Login 方法和 GetName 方法必须指定同一个 CookieContainer,因此在这里我们使用了静态变量。
但如果是在不同的页面中调用该 Web Service,问题依旧存在,因此我们需要重新修改代码,通过编写新类继承上面的 Web Service,并给 CookieContainer 赋值就可以解决该问题了:
public class WebService1:localhost.WebService
private static System.Net.CookieContainer cookieContainer;
static WebService1()
cookieContainer = new System.Net.CookieContainer();
public WebService1()
this.CookieContainer = cookieContainer;
}
调用的时候也不需要重新给 CookieContainer 赋值了:
protected void btnLogin_Click(object sender, EventArgs e)
WebService1 ws = new WebService1();
ws.Login(txtName.Text);
protected void btnGetName_Click(object sender, EventArgs e)
WebService1 ws = new WebService1();
lblName.Text = ws.GetName();}
感谢各位的阅读,以上就是“Web Service 中 session 和 cookie 如何使用”的内容了,经过本文的学习后,相信大家对 Web Service 中 session 和 cookie 如何使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!