`
isiqi
  • 浏览: 16560962 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

webservice中使用session的方法

阅读更多

在使用asp.net编写webservice时,默认情况下是不支持session的,但我们可以把WebMethodEnableSession选项设为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="form2" 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中调用该方法,也会出现同样的问题)。莫非这个方法行不通了?

其实不然,我们给该WebServiceCookieContainer赋值就可以了,修改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();

}

来自:http://www.fengfly.com/plus/view-141213-1.html

分享到:
评论

相关推荐

    WebService中Session的使用.zip

    webservice服务中如果保持Session 调用Session 对于Web Service,每个方法的调用都会启动一个Session,可以用下面的方法来使多个调用在同一个Session里 CWSSyscfg cwsCfg = new CWSSyscfg(); cwsCfg....

    webservice6 跨越session管理

    在上述示例中,`LoginService`负责处理用户登录,当登录成功后在Session中设置"login"标志。`SearchService`则检查该标志,根据Session中的信息决定是否向用户提供搜索结果。 总结来说,跨服务Session管理是保持Web...

    在asp.net中使用session常见问题集锦

    然而,如果确实需要在WebService中使用Session,可以通过配置启用Cookie支持,并确保客户端发送带有Session ID的Cookie。具体操作可以参考MSDN文档中的`HttpWebClientProtocol.CookieContainer`。 #### 自定义...

    ASP.NET WebService中使用ASP.NET_SessionId的问题说明

    在使用ASP.NET WebService时,有时会遇到与ASP.NET_SessionId相关的问题,尤其是在涉及会话状态管理的情况下。 ASP.NET_SessionId是一个由ASP.NET生成的唯一标识符,用于跟踪用户的会话状态。在用户首次访问网站或...

    在JAX-WS 中实现多个WebService间会话保持

    在JAX-WS中实现多个WebService间的会话保持是一个关键的技术需求,特别是在处理涉及多步骤交互的业务逻辑时。JAX-WS(Java API for XML Web Services)是Java平台上的Web服务开发框架,它简化了服务端和客户端的创建...

    泛微OA e-cology 8 最新webservice接口文档

    要使用文档webservice接口,需要先将其部署到服务器上。部署过程中,需要在services.xml文件中添加相应的代码,包括服务名称、命名空间、服务类、实现类等信息。然后,需要重启服务,以便应用新的配置。最后,可以...

    泛微 ecology9.0 文档(DocService)WebService接口使用说明

    以上内容详细介绍了如何部署和使用泛微ecology9.0的DocService WebService接口,包括部署步骤、客户端配置、接口方法概述以及一个简单的示例。通过这些步骤和示例,开发者可以更加轻松地集成和使用该接口。

    详解hibernate与webservice结合使用

    ### 详解Hibernate与WebService结合使用的知识点 #### 一、Hibernate简介 Hibernate是一个开源的对象关系映射(ORM)框架,它提供了强大的数据持久化机制。通过使用Hibernate,开发人员可以将面向对象模型映射到...

    在自己的项目中利用axis2+spring发布webservice与客户端调用包括session

    标题中的“在自己的项目中利用axis2+spring发布webservice与客户端调用包括session”指出的是一个关于在实际项目开发中如何使用Axis2和Spring框架来发布Web服务,并且涉及了Web服务客户端调用以及会话(session)...

    xfire开发的带session生命周期的webservice应用工程实例

    1. **服务接口和服务实现**:定义了Web服务的接口(通常为JAX-WS的`@WebService`注解的接口)和其实现类,可能包含了处理Session的方法。 2. **会话管理类**:如前所述,可能存在一个类用于管理Session生命周期。 3....

    WebSerices异步调用方法总结

    2. 创建异步方法:在代理类中创建异步方法,例如 BeginGetAsync 和 EndGetAsync。 3. 启动异步调用:使用 Begin 方法启动异步调用。 4. 处理异步调用结果:使用 End 方法或 AsyncCallback 方法处理异步调用结果。 ...

    将session bean发布为webservice的flash

    在这个过程中,你需要为Web服务命名,选择操作(即Session Bean中的方法),以及设置其他相关属性。完成后,MyEclipse会自动生成WSDL(Web服务描述语言)文件,该文件定义了Web服务的接口和绑定。 Web服务的部署...

    EAS-WebService开发指南.pdf

    在客户端代码中,我们使用了EASLoginProxyServiceLocator来调用login方法,并获取了SessionID。 结论 通过本文档,开发者可以了解如何使用EAS-WebService开发指南来构建Web服务,并且了解了WebService的开发流程和...

    详解Hibernate与WebService结合使用

    3. **在AppService中开始添加方法**:定义服务端点的方法。 4. **根据AppService类生成WSDL文件**:通过命令行工具或其他工具自动生成WSDL文件。 5. **修改AppService.wsdl文件**:调整WSDL文件中的服务描述信息。 6...

    用Java程序访问Net WebService.doc

    * J2EE 1.4 环境中直接把无状态 Session Bean(EJB2.1)发布为 WebService:在 J2EE 1.4 环境中,可以将无状态 Session Bean(EJB2.1)发布为 WebService,从而实现WebService 的调用。 * Java EE 5 中,使用标注...

    EJB WebService Demo

    它为开发人员提供了一种在Java环境中实现服务器端业务逻辑的方法。EJB与WebService的结合,允许企业级应用通过标准的Web服务接口与其他系统进行交互。 **EJB的类型** EJB主要分为三种类型: 1. **Session Beans**...

Global site tag (gtag.js) - Google Analytics