【问题标题】:HttpContext.Current is NULL in NServiceBus MessageMutatorNServiceBus MessageMutator 中的 HttpContext.Current 为 NULL
【发布时间】:2013-06-14 12:14:34
【问题描述】:

我在使用 NServiceBus 解耦前端 (MVC) 和后端 (Azure WorkerRole) 时 HttpContext.Current 为 NULL 时遇到问题。 我正在使用 IMutateTransportMessages 来拦截传出和传入的 TransportMessages。我在 Session(MVC 前端)中有一些数据,需要使用 Mutators 自动将其附加到传出的 TransportMessages。类似地,我需要将一些来自传入 TransportMessages 的数据注入到 Session 中。

为了更好地理解,让我们看一下我的简化场景:

前端:

  1. 我在会话中有数据D1
  2. 我将 CommandX 发送到 NServiceBus >> MutateOutgoing [从 Session 中获取数据 D1 并将其插入 TransportMerssage 标头 H1] >> 消息发送到总线李>

后端: 3. 我收到带有标题 H1 的 CommandX,其中包含数据 D1 4.我做一些事情 5. 我将数据D2添加到消息头H2中,并将CommanX返回给NServiceBus

前端: 6. 我在 NServiceBus >> MutateIncomming 中得到 CommandX “响应” [我在后端的标头 H2 中有数据 D2,我希望将这些数据注入会话,所以我可以在 MVC 前端使用它,但我不能,因为 HttpContext.Current 是 null]

任何想法,为什么我可以从 MutateOutgoing 而不是从 MutateIncomming 访问 Session?有什么解决方法吗?

谢谢! 马丁

【问题讨论】:

    标签: c# nservicebus


    【解决方案1】:

    MutateIncoming 将在 NServiceBus 工作线程上调用,而不是在 ASP.NET 工作线程上调用 - 因此没有 HTTP 上下文。

    想一想 - 当您处理 NServiceBus 消息时,您希望 HTTP 上下文是什么?

    如果您需要用户会话中的某些内容,您可能需要传递某种会话 ID 或相关 ID,以便在处理回复消息时将数据留在正确的位置。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    相关资源
    最近更新 更多