kee*_*pid 4 c# authentication messaging nservicebus
我在它自己的进程中使用NServiceBus(因此不使用通用主机),我希望按特定顺序为消息提供多个消息处理程序.对于通用主机,您将实现ISpecifyMessageHandlerOrdering,但我不知道如何在托管您自己的NServiceBus进程时执行此操作,因为该接口已定义,NServiceBus.Host.exe并且我无法找到另一种方法来执行此操作.
这样做的目的是用户身份验证:在调用实际的消息处理程序之前,我首先要对消息的发送者进行身份验证,这将发生在不同的,更通用的消息处理程序中.该消息的类型包含加密的用户名和密码和/或会话ID.此类型将用于发送到服务器的几乎所有命令(我认为除了登录之外的所有命令).这是使用NServiceBus进行用户身份验证的好方法吗?
目前,它会选择第二个处理程序但不是正确的顺序.
更新
正如大卫所建议的那样,我尝试创建一个IMessageModule并从中读取标题CurrentMessageContext以对用户进行身份验证.
我遇到了一些问题:
bus.CurrentMessageContext是null.每次之后,它都被正确填写,我可以阅读标题.bus.DoNotContinueDispatchingCurrentMessageToHandlers在未对用户进行身份验证时调用不会阻止调用消息处理程序.也没有bus.Return(errorCode).还有其他方法吗?如文档页面上的NServiceBus FAQ中所述:
http://docs.particular.net/nservicebus/handlers/handler-ordering
如何指定调用处理程序的顺序?
如果您正在编写自己的主持人:
NServiceBus.Configure.With()
...
.UnicastBus()
.LoadMessageHandlers(First<H1>.Then<H2>().AndThen<H3>().AndThen<H4>() //etc)
...
Run Code Online (Sandbox Code Playgroud)
如果您正在使用通用主机
public class EndpointConfig : IConfigureThisEndpoint, ISpecifyMessageHandlerOrdering
{
public void SpecifyOrder(Order order)
{
order.Specify(First<H1>.Then<H2>().AndThen<H3>().AndThen<H4>() //etc);
}
}
Run Code Online (Sandbox Code Playgroud)
如果您只想指定一个处理程序(使用您自己的主机)
NServiceBus.Configure.With()
...
.UnicastBus()
.LoadMessageHandlers<FIRST<YourHandler>>()
...
Run Code Online (Sandbox Code Playgroud)
如果您只想指定一个处理程序(使用通用主机)
public class EndpointConfig : IConfigureThisEndpoint, ISpecifyMessageHandlerOrdering
{
public void SpecifyOrder(Order order)
{
order.Specify<FIRST<YourHandler>>();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2853 次 |
| 最近记录: |