在asp.net webservice中如何使用session

原文:在asp.net webservice中如何使用session

原文:刘武|在asp.net webservice中如何使用session  

在使用asp.net编写webservice时,默认情况下是不支持session的,但我们可以把WebMethod的EnableSession选项设为true来显式的打开它,请看以下例子:

1 新建网站WebSite 

2 新建web服务WebService.asmx,它具有以下两个方法:

C#-Code:

[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

ASP.NET-Code:

<form id="form1" runat="server">    <div>        <asp:TextBox ID="txtName" runat="server"></asp:TextBox>        <asp:Button ID="btnLogin" runat="server"             Text="Login" OnClick="btnLogin_Click" />    </div>    <div>        <asp:Button ID="btnGetName" runat="server"             Text="GetName" OnClick="btnGetName_Click" />        <asp:Label ID="lblName" runat="server" Text="Label"></asp:Label>    </div></form>

SessionInWebservice.aspx.cs

C#-Code:

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 的代码:

C#-Code:

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赋值就可以解决该问题了: 

C#-Code:

public class WebService1:localhost.WebService{    private static System.Net.CookieContainer cookieContainer;

    static WebService1()    {        cookieContainer = new System.Net.CookieContainer();    }

    public WebService1()    {        this.CookieContainer = cookieContainer;    }}

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

C#-Code:

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();}
时间: 2024-08-30 02:31:06

在asp.net webservice中如何使用session的相关文章

ASP.NET WebService中使用ASP.NET_SessionId的问题说明_实用技巧

今天在帮助同事解决对WebService进行 Web References 调用问题:当调用webservice第一个方法Method1发现服务端Set-Cookie: ASP.NET_SessionId=*****保存了ASP.NET的会话状态.接着当我再调用webservice的第二个方法Method2时发现无法正确返回服务器端处理结果 也就是说webservices进行http post 的时无法正常响应服务端.感觉问题就出在cookie上(Method1调用时服务端进行了Set-Cook

Webservice中使用Session、Application

原文:Webservice中使用Session.Application在Asp.Net 2.0里,已经能够在WebMethod里使用 Session . Application 这种服务器变量了. 一.Session     [WebMethod(EnableSession = true)]    public string Hello()     {        return "Hello," + Session["user"];    }    [WebMet

急!急!!急!!!求解如何在WebService中使用Session或Cookie---WebService安全策略

问题描述 现在我们开发一个项目,业务逻辑层全部用WebService,客户端有Flex和Asp.Net,Flex和Asp.Net的所有业务逻辑数据库的访问全部调用WebService中的方法(好象Flex也不能直接对数据库进行访问,所以也只能用WebService),现在就出现问题了,就是WebService中的权限问题了,比如:我在WebService中有一个Login的方法,还有一个ChangePwd修改用户密码的方法,可之,如果我要调用ChangePwd方法前我一定要判断用户是否Login

ASP程序开发中Session的应用技巧

session|程序|技巧 写过稍微大型一点 ASP 的人都知道,Session 这个对象真是好用,它可以用来记录使用者私有的资料变量,既安全又方便.但是你真的知道 Session 的运作原理吗?或许了解以后,你就再也不太敢使用这个令人又爱又恨的对象.虽然转而替代之的方法稍嫌麻烦,但在长期考量之下,也就不得不这么做了. 首先来讲讲 Session 的好处,它可以用来记录客户端私有的资料变量,并且在时间范围内不会消失.这真的是很重要的功能,尤其是有会员的系统必须要用到的.像是会员的登入帐号.时间.

Asp.Net中NHiernate的Session的管理

asp.net|session NHibernate中的Session,在我的理解似乎就相当于数据库中连接.因为它也有Open/Close的方法,我没有研究NHibernate的源码,不知道这种理解是否有误?我在网上搜了很多的关于Session的管理,大多都是在我需要数据库操作的时候,就OpenSession(),操作完后就CloseSession().这有点拟似如我们刚开始学习ADO.NET的时候,要Connection对象Open(),数据处理完后就Close().但是这里就带来了一个弊端,

ASP.NET MVC中使用ASP.NET AJAX异步访问WebService

使用过ASP.NET AJAX的朋友都知道,怎么通过ASP.NET AJAX在客户端访问 WebService,其实在ASP.NET MVC中使用ASP.NET AJAX异步访问WebService 也没 什么大的差别. 在ASP.NET应用程序里使用ASP.NET AJAX访问WebService通常都是通过 ScriptMananger引入WebService生成客户端代理的方法,同时也可以使用 Microsoft Ajax Library来完成.本文将介绍在ASP.NET MVC中使用AS

ASP.NET ASHX中获得Session的方法_实用技巧

1-在 aspx和aspx.cs中,都是以Session["xxx"]="aaa"和aaa=Session["xxx"].ToString()进行读写. 而在ashx中,Session都要使用context.Session,读写方法是这样的: context.Session["xxx"]="aaa"和aaa=context.Session["xxx"].ToString() 2-在ash

ASP.NET页面中去除VIEWSTATE视图状态乱码

首先声明下这篇文章:本文章的发表于2014-10-11日,原作者和版权所有:KoalaAPI(还是本人啦),原链接:http://www.cnblogs.com/KoalaAPI/p/4018727.html(曾被删除!) 保存页的所有视图状态信息和控件状态信息. 作者在早期参与的项目中曾遇到这样的需求:基于SEO技术的开发,当因为时没有接触的MVC框架的 Razor 引擎,所以只能用ASP.NET引擎,如果使用ASP.NET引擎的服务器端控件,那么在ASP.NET页面中就会生成 __Views

菜鸟十天学会ASP教程之第九天:Session组件

session|教程|十天学会 上一节:修改记录 学习目的:基本的SESSION组件,总结response,request组件. 首先,有会员系统的任何程序都会用到检测是不是用户已经登陆这个步骤.这就用到了SESSION组件,下面我们 看一个代码来说明. <%session("login")="yes"%> 这句话的意思就是在session里面定义一个login字符串变量,值为"yes",直接可以赋值,不需要声明.是不是很简单? 如果