【发布时间】:2013-05-01 14:15:58
【问题描述】:
我有一个 wcf 服务(托管在 IIS 中),它是 setup to use sessions。它似乎工作。当Application_PostAcquireRequestState 被调用时,我有一个会话ID。
我最终像这样使用它(在我的 Global.asax 中):
if (Context.Handler is IRequiresSessionState)
{
log4net.ThreadContext.Properties["sessionId"] = Session.SessionID;
}
这似乎工作正常。该值存储在我的 log4net 属性中。
但是当我的服务操作开始时(我的实际 WCF 服务代码),log4net 属性再次为空。
由于属性是按线程存储的 (ThreadContext),我只能假设这意味着会话是在一个线程上设置的,然后在另一个线程上执行。我说的对吗?
有没有办法在正确的线程上设置我的 log4net 属性(不必记住在每个服务操作开始时进行上述调用)?
【问题讨论】:
-
我总是希望涉及多个线程。我不确定我在哪里捡到的。您是否考虑过服务本身的(自定义)行为以实现您想要的?