在使用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="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中调用该方法,也会出现同样的问题)。莫非这个方法行不通了?
其实不然,我们给该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();
}
来自:http://www.fengfly.com/plus/view-141213-1.html
分享到:
相关推荐
webservice服务中如果保持Session 调用Session 对于Web Service,每个方法的调用都会启动一个Session,可以用下面的方法来使多个调用在同一个Session里 CWSSyscfg cwsCfg = new CWSSyscfg(); cwsCfg....
在上述示例中,`LoginService`负责处理用户登录,当登录成功后在Session中设置"login"标志。`SearchService`则检查该标志,根据Session中的信息决定是否向用户提供搜索结果。 总结来说,跨服务Session管理是保持Web...
然而,如果确实需要在WebService中使用Session,可以通过配置启用Cookie支持,并确保客户端发送带有Session ID的Cookie。具体操作可以参考MSDN文档中的`HttpWebClientProtocol.CookieContainer`。 #### 自定义...
在使用ASP.NET WebService时,有时会遇到与ASP.NET_SessionId相关的问题,尤其是在涉及会话状态管理的情况下。 ASP.NET_SessionId是一个由ASP.NET生成的唯一标识符,用于跟踪用户的会话状态。在用户首次访问网站或...
在JAX-WS中实现多个WebService间的会话保持是一个关键的技术需求,特别是在处理涉及多步骤交互的业务逻辑时。JAX-WS(Java API for XML Web Services)是Java平台上的Web服务开发框架,它简化了服务端和客户端的创建...
以上内容详细介绍了如何部署和使用泛微ecology9.0的DocService WebService接口,包括部署步骤、客户端配置、接口方法概述以及一个简单的示例。通过这些步骤和示例,开发者可以更加轻松地集成和使用该接口。
要使用文档webservice接口,需要先将其部署到服务器上。部署过程中,需要在services.xml文件中添加相应的代码,包括服务名称、命名空间、服务类、实现类等信息。然后,需要重启服务,以便应用新的配置。最后,可以...
### 详解Hibernate与WebService结合使用的知识点 #### 一、Hibernate简介 Hibernate是一个开源的对象关系映射(ORM)框架,它提供了强大的数据持久化机制。通过使用Hibernate,开发人员可以将面向对象模型映射到...
标题中的“在自己的项目中利用axis2+spring发布webservice与客户端调用包括session”指出的是一个关于在实际项目开发中如何使用Axis2和Spring框架来发布Web服务,并且涉及了Web服务客户端调用以及会话(session)...
1. **服务接口和服务实现**:定义了Web服务的接口(通常为JAX-WS的`@WebService`注解的接口)和其实现类,可能包含了处理Session的方法。 2. **会话管理类**:如前所述,可能存在一个类用于管理Session生命周期。 3....
2. 创建异步方法:在代理类中创建异步方法,例如 BeginGetAsync 和 EndGetAsync。 3. 启动异步调用:使用 Begin 方法启动异步调用。 4. 处理异步调用结果:使用 End 方法或 AsyncCallback 方法处理异步调用结果。 ...
在这个过程中,你需要为Web服务命名,选择操作(即Session Bean中的方法),以及设置其他相关属性。完成后,MyEclipse会自动生成WSDL(Web服务描述语言)文件,该文件定义了Web服务的接口和绑定。 Web服务的部署...
在客户端代码中,我们使用了EASLoginProxyServiceLocator来调用login方法,并获取了SessionID。 结论 通过本文档,开发者可以了解如何使用EAS-WebService开发指南来构建Web服务,并且了解了WebService的开发流程和...
3. **在AppService中开始添加方法**:定义服务端点的方法。 4. **根据AppService类生成WSDL文件**:通过命令行工具或其他工具自动生成WSDL文件。 5. **修改AppService.wsdl文件**:调整WSDL文件中的服务描述信息。 6...
* J2EE 1.4 环境中直接把无状态 Session Bean(EJB2.1)发布为 WebService:在 J2EE 1.4 环境中,可以将无状态 Session Bean(EJB2.1)发布为 WebService,从而实现WebService 的调用。 * Java EE 5 中,使用标注...
它为开发人员提供了一种在Java环境中实现服务器端业务逻辑的方法。EJB与WebService的结合,允许企业级应用通过标准的Web服务接口与其他系统进行交互。 **EJB的类型** EJB主要分为三种类型: 1. **Session Beans**...