博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在asp.net webservice中如何使用session
阅读量:6454 次
发布时间:2019-06-23

本文共 2470 字,大约阅读时间需要 8 分钟。

原文:

原文:| 

在使用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();     else         return ""; }

3 添加asp.net页面SessionInWebservice.aspx

   
       
       
   
   
       
       
   

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引用来调用刚才编写的webservice,问题就出来了,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,因此在这里我们使用了静态变量。

但如果是在不同的页面中调用该webservice,问题依旧存在,因此我们需要重新修改代码,通过编写新类继承上面的webservice,并给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(); }

转载地址:http://klyzo.baihongyu.com/

你可能感兴趣的文章
新闻奖颁给了一个写稿机器人(来自新华社)
查看>>
Android应用程序在新的进程中启动新的Activity的方法和过程分析
查看>>
spring boot 拦截器
查看>>
数组和指针
查看>>
Python version 2.7 required, which was not found in the registry
查看>>
Oracle 学习之--ASM DISK Header的备份和恢复(1)
查看>>
Oracle Study之案例--Oracle ASSM管理方式下的BITMAP
查看>>
根据umask值,计算文件权限
查看>>
VLSM规划
查看>>
How to upgrade the ant built into eclipse?
查看>>
在线BASE64加密解密、UrlEncode编码/解码、native/ascii在线转换工具
查看>>
CentOS 6.3 安装 JDK
查看>>
XenServer 6.5实战系列:Creating a VM Template from an Existing VM
查看>>
poi导出word
查看>>
云终端选购注意规避五个陷阱
查看>>
关于 Java 对象序列化您不知道的 5 件事
查看>>
cronolog介绍
查看>>
rpm包管理命令使用详解
查看>>
Linux 的 NUMA 技术
查看>>
虚拟磁带库VTL在实践中的优势
查看>>