【问题标题】:NServiceBus System.ArgumentNullExceptionNServiceBus System.ArgumentNullException
【发布时间】: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 但这里的关键是弄清楚pathSystem.ArgumentNullException: Value cannot be null. Parameter name: path 中为空是什么 在您发现下一个问题是为什么它为空之后。你能单步执行代码以某种方式缩小范围吗?
  • 感谢您的回复!当我查看正在发送的对象时,这些对象不为空,因此我倾向于在 MSMQ 和 UnicastBus 之间配置错误。让我去看看我能不能在这条路上找到更多的东西。 brb。
  • 这非常有帮助!我将事件更改为只有一个字符串,它通过了就好了。所以问题是我的事件对象和数据类型。谢谢乔安娜!你摇滚!
  • 很高兴你找到它 :-)
  • 顺便说一句:当应用程序尝试访问某种文件时会引发异常。将应用程序指向正确的位置看起来有点像缺少配置值?你知道那是什么文件吗?

标签: c# msmq nservicebus


【解决方案1】:

如果您想使用 NServiceBus 移动文件或其他 blob,请查看使用此处描述的“数据总线”功能:

http://docs.particular.net/NServiceBus/attachments-databus-sample

【讨论】:

  • 感谢乌迪!知道为什么 pubsub 示例会在 Win7 上开箱即用地抛出“主机不支持托管多个端点。”吗?我尝试在调试时将所有内容更改为 NServiceBus.Lite,但没有骰子。
  • 我不太确定你想做什么,但 NServiceBus 目前不支持在同一个进程中托管多个端点。
【解决方案2】:

原来你不能反序列化 FileInfo 对象。所以我必须以完全不同的方式处理这个问题。

【讨论】:

    猜你喜欢
    • 2016-07-10
    • 1970-01-01
    • 2010-12-11
    • 2023-04-03
    • 1970-01-01
    • 2016-07-08
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多