.net - 从 2.6 升级到 3.0 后出现 NServiceBus 模拟问题

标签 .net nservicebus

我刚刚从 NSB 2.6 升级到 3.0,并且在引发传输消息时遇到 NSB 抛出 ArgumentNullException 的问题:

NServiceBus.Unicast.Transport.Transactional.TransactionalTransport [(null)] <(null)> - 
Failed raising 'transport message received' event for message with ID=21d502f4-0e66-4d1e-801c10ddc1cbe40a\34416
        System.ArgumentNullException: Value cannot be null.
        Parameter name: name
           at System.Security.Principal.GenericIdentity..ctor(String name)
           at NServiceBus.Impersonation.ImpersonationManager.Transport_TransportMessageReceived(Object sender, TransportMessageReceivedEventArgs e)
           at System.EventHandler`1.Invoke(Object sender, TEventArgs e)
           at NServiceBus.Unicast.Transport.Transactional.TransactionalTransport.OnTransportMessageReceived(TransportMessage msg)

该场景是一个 Web 应用,它将消息发送到当前托管在控制台中的端点(但将作为 Windows 服务运行)。

网络应用程序的配置:

Configure.WithWeb()
    .Log4Net()
    .DefaultBuilder()
    .XmlSerializer()                                    
    .MsmqTransport()
        .IsTransactional(false)
        .PurgeOnStartup(false)
    .UnicastBus()
        .ImpersonateSender(false)
        .CreateBus()
    .Start();

端点使用生产配置文件并具有以下配置:

   Configure.With()
        .StructureMapBuilder()
        .Sagas()
        .RunTimeoutManager()
        .UnicastBus()
           .ImpersonateSender(false)

如您所见,模拟在 Web 应用程序和端点中均已关闭(在升级之前,我没有在端点上配置模拟),但 NSB 仍在尝试模拟,但失败了因为消息头中的 WinIdName 为空。

问题是,为什么 NSB 在配置为不这样做的情况下却试图进行模拟,以及自 2.6 以来发生了什么变化导致模拟突然失败?

编辑:当我进一步调查时,它似乎在将消息发送到端点时尝试模拟 Web 应用程序的用户,即使它被配置为不这样做。

最佳答案

这是 2 个问题。一是如果身份由于某种原因为空,我们就会爆炸。

此问题现已修复(将在 NSB 3.0.1 中推出)

https://github.com/NServiceBus/NServiceBus/commit/eaaafecbbedc7c82d996ce466434038d70bc27cd

另一个是角色As_aServer 覆盖了ImpersonateSender(false)。这是一个更大的改变。解决方法是不使用该角色,而仅手动配置相同的设置:

https://github.com/NServiceBus/NServiceBus/blob/master/src/hosting/NServiceBus.Hosting.Windows/Roles/Handlers/ServerRoleHandler.cs

关于.net - 从 2.6 升级到 3.0 后出现 NServiceBus 模拟问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9685771/

相关文章:

c# - .Net Framework 和 .Net Core 在同一个解决方案中

c# - 如何使用 NServiceBus 避免 READPAST 锁定警告

c# - 如何在 Web 应用程序中使用 System.Windows.Forms.WebBrowser?

c# - YouTube API服务帐户在插入播放列表项时返回 'forbidden 403'

c# - 没有默认构造函数和自动属性,为什么它仍然可以编译

NServiceBus 和决定服务边界

NServiceBus - 初学者教程

c# - CUDA C# .Net 示例项目? VS2010

asp.net - 对于自托管 NServiceBus ASP.NET 端点,MSDTC 失败,但对于其他进程则失败

rabbitmq - 与纯RabbitMQ相比,使用NServiceBus + RabbitMQ有什么优势?