我对某个特定部署遇到的问题感到有点困惑,但不是 在我的构建机器上。这是一个接收NServiceBus事件的Web应用程序 持久视图模型已更新。服务传入的MSMQ中有等待的事件,所以 订阅似乎正常,但应用程序没有处理 他们。我得到的输出如下所示。抱歉大量的文字;该 总结是日志指向UnicastBus.Address在运行时是Nothing。 我的配置中可能缺少某些东西。
以下是日志:
[Worker.11] INFO NServiceBus.Unicast.UnicastBus [(null)] -
Common.Users.WebApp.DevTest initialized.
[10] INFO NServiceBus.Unicast.UnicastBus [(null)] - Subscribing to
Common.Users.Messages.Events.IAllUsersPublished, Common.Users.Messages,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null at publisher queue
Common.Users.MessageHandlers.DevTest
[10] INFO NServiceBus.Unicast.UnicastBus [(null)] - Subscribing to
Common.Users.Messages.Events.IAllUsersPublished, Common.Users.Messages,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null at publisher queue
Common.Users.MessageHandlers.DevTest
INFO NServiceBus.Unicast.UnicastBus [(null)] - Common.Users.WebApp.DevTest
initialized.
WARN NServiceBus.Unicast.Transport.Msmq.MsmqTransport [(null)] - Failed raising
'transport message received' event for message with
ID=537591b0-20e2-4ab9-aabc-b635c3d0e23c\3997
System.ArgumentNullException: Value cannot be null.
Parameter name: value
at System.String.IndexOf(String value, Int32 startIndex, Int32 count,
StringComparison comparisonType)
at NServiceBus.Unicast.UnicastBus.IsInitializationMessage(TransportMessage
msg) in
d:\code\nservicebus-src\src\unicast\NServiceBus.Unicast\UnicastBus.cs:line 1211
at NServiceBus.Unicast.UnicastBus.TransportMessageReceived(Object sender,
TransportMessageReceivedEventArgs e) in
d:\code\nservicebus-src\src\unicast\NServiceBus.Unicast\UnicastBus.cs:line 1056
at System.EventHandler`1.Invoke(Object sender, TEventArgs e)
at
NServiceBus.Unicast.Transport.Msmq.MsmqTransport.OnTransportMessageReceived(Tran\
sportMessage msg) in
d:\code\nservicebus-src\src\impl\unicast\NServiceBus.Unicast.Msmq\MsmqTransport.\
cs:line 400
对队列中的每条消息重复此最后一个条目;队列消息 留在队列中。
所以我检查了源代码IsInitializationMessage;这是投掷 代码:
private bool IsInitializationMessage(TransportMessage msg)
{
if (msg.ReturnAddress == null)
return false;
if (!msg.ReturnAddress.Contains(Address)) <<< THROWS
return false;
所以似乎UnicastBus.Address是Nothing。不知道为什么会这样; 这是NServiceBus配置:
<MsmqTransportConfig
InputQueue="Common.Users.WebApp.DevTest"
NumberOfWorkerThreads="1"
MaxRetries="5"
ErrorQueue="Common.Users.WebApp.DevTest.Errors" />
<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="Common.Users.Messages"
Endpoint="Common.Users.MessageHandlers.DevTest" />
</MessageEndpointMappings>
</UnicastBusConfig>
在Application_Start上我使用以下代码启动NServiceBus:
Dim bus = NServiceBus.Configure.WithWeb() _
.Log4Net() _
.StructureMapBuilder() _
.XmlSerializer() _
.MsmqTransport() _
.UnicastBus().LoadMessageHandlers() _
.CreateBus()
bus.Start()
答案 0 :(得分:1)
我将Web应用程序的应用程序池正在使用的标识从defaultapppool更改为NETWORK SERVICE。在下次启动时,Web应用程序报告了相同的错误。它在一小时后再次重新启动,问题消失了,所有消息都已成功处理完毕。我不知道身份变化是否修复了它,或者是否有其他一些我不知道的变化。如果它再次发生或我了解更多,我会尝试在这里发布。