2014-02-26 2 views
0

내가 NServiceBus (및 녹색 개발자)에 새로 온 사람과 나는이 예외에 의해 파괴지고있어합니다 (NSB 콘솔 핸들러를 호출하기 전에) : 내가 가진NServiceBus System.ArgumentNullException

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 예를 얻을 수 없습니다.' 난 그냥 단순한 1 노드 술집과 1 노드 하위가는려고, 내 깨진 솔루션에 3 개 프로젝트에서 일하고 있어요 :

  • 코어 (NServiceBus.Interfaces 4.4.1 NuGet에서, 이벤트 폴더가 포함 NuGet에서 NuGet에서 IFileUploadedEvent.cs)
  • FileWatcherService (NServiceBus.Host 4.4.1)
  • FileMoverService (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에 포함 된 다음 NSB 창에서

<UnicastBusConfig> 
    <MessageEndpointMappings> 
     <add Messages="Core" Endpoint="FileWatcherService" /> 
    </MessageEndpointMappings> 
    </UnicastBusConfig> 

, 나는 참조 FileMover : Core.Events.IFileUploadedEvent 구독하기 FileWatcher : @ ccc에서 메시지 유형 구독하기 Core.Events.IFileUploadedEvent

FileMover 클래스는 IHandleMessages를 구현하지만 NServiceBus가 첫 번째 오류를 throw하기 때문에 코드에 도달하지 않습니다.

EndpointConfig에서 Init()를 실행하려고했지만 여전히 동일한 오류가 발생합니다. 제발 도와주세요! 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

NServiceBus하지만 키가 여기 파악하는 것에 대해 어떠한 생각이 무엇인지 'path'는 System.ArgumentNullException에서 null입니다 : 값은 null 일 수 없습니다. 매개 변수 이름 : 경로'다음 질문을 찾으면 그 이유는 null입니다. 코드를 단계적으로 축소하여 어떻게 든 축소 할 수 있습니까? –

+0

답장을 보내 주셔서 감사합니다. 전송되는 개체를 볼 때 개체가 null이 아니므로 MSMQ와 UnicastBus간에 잘못 구성된 것으로 향하고 있습니다. 내가 그 길에서 더 많은 것을 찾을 수 있는지 알아 보도록하겠습니다. Brb. – TurtleDev

+0

매우 도움이되었습니다! 이벤트를 문자열로 변경했으며, 그냥 잘 전달합니다. 문제는 내 이벤트 개체와 데이터 형식입니다. 감사합니다 조안나! 너 락! – TurtleDev

답변

0

당신이 NServiceBus를 사용하여 파일 또는 다른 모양을 이동하려면, 우리의 "데이터 버스"를 사용하여보고 여기에 설명 된 기능 :

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

+0

감사합니다. Udi! 왜 pubsub 예제가 '호스트가 다중 종단점의 호스팅을 지원하지 않습니다.'라는 생각을하는 이유는 무엇입니까? 디버그에서 NServiceBus.Lite로 모든 것을 변경하려고 시도했지만 주사위는 사용하지 않았습니다. – TurtleDev

+0

당신이 뭘 하려는지는 잘 모르겠지만, NServiceBus는 현재 같은 프로세스에서 여러 엔드 포인트를 호스팅하는 것을 지원하지 않습니다. –

0

FileInfo 개체를 역 직렬화 할 수 없습니다. 그래서 나는 완전히 다른 방식으로이 문제에 접근해야 할 것입니다.