【发布时间】:2015-08-11 21:42:55
【问题描述】:
我是 NServiceBus 的新手(也是一名绿色开发人员),我被这个异常破坏了(在 NSB 控制台中,在调用处理程序之前):
2014-02-26 14:27:10,269 [8] ERROR NServiceBus.Unicast.Transport.TransportReceiver [(null)] <(null)> -
Failed to deserialize message with ID: b0e459fa-0ada-431c-bbee-a2de00ee2a29
System.Runtime.Serialization.SerializationException: An error occurred while attempting to extract logical messages
from transport message NServiceBus.TransportMessage ---> System.ArgumentNullException: Value cannot be null.
Parameter name: path
at System.IO.Path.CheckInvalidPathChars(String path, Boolean checkAdditional)
at System.Security.Permissions.FileIOPermission.AddPathList(FileIOPermissionA
ccess access, AccessControlActions control, String[] pathListOrig, Boolean check
ForDuplicates, Boolean needFullPath, Boolean copyPathList)
at System.IO.FileSystemInfo.set_Attributes(FileAttributes value)
at SetIsReadOnly(Object , Object )
at NServiceBus.Serializers.XML.XmlMessageSerializer.GetObjectOfTypeFromNode(T
ype t, XmlNode node) in c:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core
\Serializers\XML\XmlMessageSerializer.cs:line 492
at NServiceBus.Serializers.XML.XmlMessageSerializer.GetPropertyValue(Type typ
e, XmlNode n) in c:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\Serial
izers\XML\XmlMessageSerializer.cs:line 828
at NServiceBus.Serializers.XML.XmlMessageSerializer.GetObjectOfTypeFromNode(T
ype t, XmlNode node) in c:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core
\Serializers\XML\XmlMessageSerializer.cs:line 487
at NServiceBus.Serializers.XML.XmlMessageSerializer.Process(XmlNode node, Obj
ect parent, Type nodeType) in c:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBu
s.Core\Serializers\XML\XmlMessageSerializer.cs:line 379
at NServiceBus.Serializers.XML.XmlMessageSerializer.Deserialize(Stream stream
, IList`1 messageTypesToDeserialize) in c:\BuildAgent\work\31f8c64a6e8a2d7c\src\
NServiceBus.Core\Serializers\XML\XmlMessageSerializer.cs:line 359
at NServiceBus.Unicast.Messages.ExtractLogicalMessagesBehavior.Extract(Transp
ortMessage physicalMessage) in c:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceB
us.Core\Unicast\Messages\ExtractLogicalMessagesBehavior.cs:line 74
at NServiceBus.Unicast.Messages.ExtractLogicalMessagesBehavior.Invoke(Receive
PhysicalMessageContext context, Action next) in c:\BuildAgent\work\31f8c64a6e8a2
d7c\src\NServiceBus.Core\Unicast\Messages\ExtractLogicalMessagesBehavior.cs:line
52
--- End of inner exception stack trace ---
我从免费章节中获得了 MVC 示例项目,但我无法让 pubsub 示例工作,因为“主机不支持托管多个端点。” 我在我破碎的解决方案中从事 3 个项目,只是试图让一个简单的 1-node pub 和 1-node sub 运行:
- 核心(来自 NuGet 的 NServiceBus.Interfaces 4.4.1,包含带有 IFileUploadedEvent.cs 的事件文件夹)
- FileWatcherService(来自 NuGet 的 NServiceBus.Host 4.4.1)
- FileMoverService(来自 NuGet 的 NServiceBus.Host 4.4.1)
核心\事件\IFileUploadedEvent.cs:
using NServiceBus;
using ...
namespace Core.Events
{ public interface IFileUploadedEvent : IEvent
{ Guid EventId { get; set; }
string Client { get; set; }
FileInfo FileName { get; set; }
}
}
FileWatcherService 有默认的 app.config,没有映射。 FileWatcherService.EndpointConfig.cs:
namespace FileWatcherService
{ using NServiceBus;
public class EndpointConfig : IConfigureThisEndpoint, AsA_Publisher {}
}
FileWatcherService.FileWatcher.cs:
using NServiceBus;
using Core.Events;
using ...
namespace FileWatcherService
{ public class FileWatcher : IWantToRunWhenBusStartsAndStops
{ public IBus Bus { get; set; }
public void Activate()
{ ... }
...Stalker, calls PublishFileUploaded
public void PublishFileUploaded(FileInfo fileName, string clientName)
{ Bus.Publish<IFileUploadedEvent>(evt =>
{ evt.EventId = Guid.NewGuid();
evt.Client = clientName;
evt.FileName = fileName;
});
} } }
FileMoverService.App.config 包含:
<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="Core" Endpoint="FileWatcherService" />
</MessageEndpointMappings>
</UnicastBusConfig>
在 NSB 窗口中,我看到 FileMover:订阅 Core.Events.IFileUploadedEvent FileWatcher:订阅 FileMoverService@ccc 到消息类型 Core.Events.IFileUploadedEvent
FileMover 类实现了 IHandleMessages,但由于 NServiceBus 引发了第一个错误,因此代码永远无法实现。
我尝试在 EndpointConfig 中运行 Init(),但仍然遇到同样的错误。 请帮帮我!我做错了什么?
【问题讨论】:
-
不知道 NServiceBus 但这里的关键是弄清楚
path在System.ArgumentNullException: Value cannot be null. Parameter name: path中为空是什么 在您发现下一个问题是为什么它为空之后。你能单步执行代码以某种方式缩小范围吗? -
感谢您的回复!当我查看正在发送的对象时,这些对象不为空,因此我倾向于在 MSMQ 和 UnicastBus 之间配置错误。让我去看看我能不能在这条路上找到更多的东西。 brb。
-
这非常有帮助!我将事件更改为只有一个字符串,它通过了就好了。所以问题是我的事件对象和数据类型。谢谢乔安娜!你摇滚!
-
很高兴你找到它 :-)
-
顺便说一句:当应用程序尝试访问某种文件时会引发异常。将应用程序指向正确的位置看起来有点像缺少配置值?你知道那是什么文件吗?
标签: c# msmq nservicebus