NServiceBus MessageMutator中的HttpContext.Current为NULL

时间:2013-06-14 12:14:34

标签: c# nservicebus

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

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

Fron-end:

  1. 我在会话
  2. 中有数据 D1
  3. 我将CommandX发送到NServiceBus>> MutateOutgoing [从数据 D1 形成会话并将其插入TransportMerssage标题 H1 ]>>消息被发送到总线
  4. 后端:  3.我收到包含数据 D1 的标题 H1 的CommandX  我做了一些事情  5.我将数据 D2 添加到消息头 H2 中,并将CommanX返回给NServiceBus

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

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

    谢谢! 马丁

1 个答案:

答案 0 :(得分:2)

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

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

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