首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在线程化的.Net How服务中启用会话?

如何在线程化的.Net How服务中启用会话?
EN

Stack Overflow用户
提问于 2012-07-11 12:04:31
回答 3查看 929关注 0票数 2

我有一个.Net with服务,有2种方法:

代码语言:javascript
运行
复制
[WebMethod(EnableSession = true)]
public void A()
{
   HttpSessionState session = Session;

   Thread thread = new Thread(B);
   thread.Start();
}

[WebMethod(EnableSession = true)]
public void B()
{
   HttpSessionState session = Session;
}

场景1)当我直接调用B方法时,会话不是null

场景2),但是当我调用A时,在B中,会话和HttpContext.Current都是空的。

为什么?如何在第二个场景中启用B中的会话?我如何访问A中的会话?我应该把它的会话传递给B吗?如果是,怎么做?

方法B不应将会话作为参数。

谢谢,

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-14 05:04:00

我必须使用一个全局域:

代码语言:javascript
运行
复制
/// <summary>
/// Holds the current session for using in threads.
/// </summary>
private HttpSessionState CurrentSession;

[WebMethod(EnableSession = true)]
public void A()
{
   CurrentSession = Session;

   Thread thread = new Thread(B);
   thread.Start();
}

[WebMethod(EnableSession = true)]
public void B()
{
  //for times that method is not called as a thread
  CurrentSession = CurrentSession == null ? Session : CurrentSession;

   HttpSessionState session = CurrentSession;
}
票数 -1
EN

Stack Overflow用户

发布于 2012-07-11 12:11:44

这是因为你要用新的线程启动B。

http://forums.asp.net/t/1276840.aspxhttp://forums.asp.net/t/1630651.aspx/1

票数 0
EN

Stack Overflow用户

发布于 2012-07-14 11:02:38

代码语言:javascript
运行
复制
[WebMethod(EnableSession = true)]
public void A()
{
   HttpSessionState session = Session;

   Action action = () => B_Core(session);
   Thread thread = new Thread(action);
   thread.Start();
}

[WebMethod(EnableSession = true)]
public void B()
{
   HttpSessionState session = Session;
   B_Core(session);
}
private void B_Core(HttpSessionState session)
{
    // todo
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11432267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档