我刚刚从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应用程序和端点中都被关闭(升级之前我没有在端点上配置Impersonation),但是NSB仍在尝试模拟,并且失败了因为消息头中的WinIdName为空。
问题是,为什么NSB在配置为不这样做时会尝试冒充,以及自2.6以来发生了什么变化导致突然失败?
编辑:在我进一步调查时,看起来它尝试在将消息发送到端点时尝试模拟Web应用的用户,即使它已配置为不这样做。
答案 0 :(得分:2)
这是2个问题。一个是如果由于某种原因身份为空,我们就会爆炸。
现已修复(将在NSB 3.0.1中推出)
https://github.com/NServiceBus/NServiceBus/commit/eaaafecbbedc7c82d996ce466434038d70bc27cd
另一个是角色As_aServer覆盖了ImpersonateSender(false)。这是一个更大的变化。解决方法是不使用角色,只手动配置相同的设置: