2012-02-01 9 views
0

DataBus 기능을 사용하지 않는 웹 응용 프로그램에서 NServiceBus를 설정하려고했습니다. 내가 버스의 구성의 측면에서 무슨이이다웹 응용 프로그램의 NServiceBus

_containerProvider.Register(Component.For<IProducer>() 
    .UsingFactoryMethod(() => new NServiceBusProducer(() => Configure 
     .WithWeb() 
     .DefaultBuilder() 
     //.AsMasterNode() 
     .Log4Net() 
     .MsmqTransport() 
      .IsTransactional(false) // ?? 
      .PurgeOnStartup(false) 
     .UnicastBus() 
     .DefiningMessagesAs(t => t.Namespace != null && t.Namespace == "Magma.CommunicationBus.Messages") 
     .JsonSerializer() 
     .FileShareDataBus(@"..\..\..\abc") 
     //.CreateBus() 
     //.Start())) 
     .SendOnly())) 
    .LifestyleSingleton()); 

이 NServiceBus가 저장 폴더를 만드는 권한 문제인지 모르겠어요,하지만 난 심지어 데이터 버스가 초기화되는 것을 볼 수 없습니다 . '듣기'측면에서 나는이 문자열을 출력으로 볼 수 있습니다 :

  • 파일 공유 데이터 버스가 시작되었습니다. 위치 : ...

그러나 웹앱 출력에서는이 사실을 볼 수 없습니다. 또한, NServiceBus가 초기화 될 때 버스가 사용하는 뮤 테이터의 목록을 볼 수 있습니다. 그리고 다시 'DataBusMessageMutator'의 흔적이 없습니다

참고 이메일 첨부 파일을 보낼 때 사용하고 있습니다. 이것은 내가하는 방법입니다 :

message.Attachements = new DataBusProperty<byte[]>(email.Attachments.Select(a => 
{ 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     a.ContentStream.CopyTo(ms); 
     return ms.ToArray(); 
    } 
}).First()); 

나는 1 개로 만 노력하고 있지만 첨부 파일 목록을 보내려합니다.

'보내는'쪽에서는 작동하지 않습니다. 물론 뮤 테이타가 존재하지 않는 헤더를 가져 와서 읽는 '파일'의 파일 경로를 만들려고 할 때 NServiceBus 코드의 어딘가에서 '듣기'측면에서 충돌합니다. Path.Combine '호출에서'key '매개 변수가 null이므로'FileShareDataBus '클래스의'Get '메서드에서 충돌이 발생합니다.

무엇이 잘못되었거나 누락 되었습니까?

+0

필자는이 기능을 작동 시키려고 시도하는 '시행 착오'방식으로 가고 있었고 그 이유를 모르지만 'ICommand'인터페이스를 구현함으로써 작동하기 시작했습니다. 나는 내 메시지에 눈에 띄지 않는 모드를 사용하고 있었다는 것을 잊어 버렸을 것이다. NServiceBus의 사람들은 2 가지 기능간에 비 호환성이 있습니까? (눈에 거슬리지 않고 데이터 버스) –

답변

1

그럼 내가 대답을 찾은 것 같습니다. 데이터 버스가 제대로 작동하려면 I (메시지 | 명령 | 이벤트) 인터페이스를 구현해야합니다. 또한, 당신은 같은 것을 사용하여 항목의 목록을 보낼 수 있습니다 : 나는 이메일 메시지에 여러 첨부 파일을 보내려면이 사용하고

new DataBusProperty<IEnumerable<byte[]>> 

.

그러나 나는 눈에 잘 띄지 않는 모드에서 작동하지 않는 이유에 대해 여전히 궁금합니다. NServiceBus 사람들이이 질문을보고 이것을 설명하기를 바랍니다.

+0

DatabusProperty를 nservicebus에 대한 참조를 피하기 위해 규칙으로 대체해야하기 때문에 databus가 눈에 잘 띄지 않는 모드와 호환되지 않습니다. –

+0

예, IMessage 종속성을 제거하려는 것으로 보입니다. 가능한 한 많이 ICommand와 IEvent 인터페이스는 내가 이해할 수있는 것과 모순되는 것처럼 보입니다. 사용자가 NServiceBus에 메시지가 무엇인지에 관해 알려주는 것을 돕습니다. 이러한 인터페이스를 대체하기 위해 일종의 다른 규칙을 추가 할 예정입니까? 또한 내가 가지고 있던 문제에 대한 내 생각을 확인해 주셔서 감사합니다. –

+0

이미이를 수행하기위한 규칙이 있습니다. - https://github.com/NServiceBus/NServiceBus/blob/develop/Samples/Unobtrusive/Server/EndpointConfig.cs –