ESB 배경없이 NServiceBus를 처음 사용하는 데 어려움을 겪고 있습니다. 블로그 게시물, 샘플, 문서 등을 읽은 후 C# 클래스 라이브러리가 메시지를 보내지 않는 이유를 알 수 없습니다. Message.TraceStatement. 메시지를 보낼 수 없습니다. 구성 파일의 UnicastBusConfig 섹션을 확인하고 MessageEndpointMapping이 메시지 유형에 있는지 확인하십시오. "코드 추적 메커니즘으로 NServiceBus : 클래스 라이브러리에서 메시지 보내기 및 SignalR을 사용하여 웹 응용 프로그램에 표시
하지만 처음에는 내가 본 어떤 샘플과도 다르므로 먼저 내 아키텍처와 내가하려는 일에 대해 약간 설명합니다.
내 의도는 SignalR 및 NServiceBus like Ben did을 사용하는 것입니다,하지만 두 가지 주요 변화 :
- NServiceBus.Host.exe 없음 사용. 나는 웹 전용, 콘솔 구현이 필요 없다.
- 메시지는 실시간 코드 추적을 위해 중간 계층 클래스 라이브러리에서 전송됩니다. 즉, 내 코드 주위에 Bus.Send 문을 뿌리므로 웹 페이지에서 코드 실행 추적 문 (개발자가 설정 한 임시 문자열)을 볼 수 있습니다.
내가 그런 제가 구상하는 것도 가능 아니라고 학위 (또는 기술의 오용)에 NServiceBus을 오해하지 않은 가정하면, 나는 클래스 라이브러리에서 메시지를 보내는 방법을 파악하고 싶습니다. 현재 내가 다음과 같이 app.config 파일이있는 "관리자"DLL을 가지고 :
<configuration>
<configSections>
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
</configSections>
<MsmqTransportConfig InputQueue="TerminalQueue" ErrorQueue="TerminalErrorQueue" NumberOfWorkerThreads="1" MaxRetries="5"/>
<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="Messages" Endpoint="WorkerQueue" />
</MessageEndpointMappings>
</UnicastBusConfig>
</configuration>
참고 : 벤의 프로젝트에서 나는 "메시지"를 "명령"을 이름. 따라서 (내 게시물의 상단에있는 오류 메시지를 참조하여) MessageEndpointMapping을 올바르게 정의했다고 말할 수 있습니다. (대기열이 MSMQ에 있는지 확인했습니다.)
누구든지 내가 뭘 잘못하고 있다고 말할 수 있습니까?
또한 NServiceBus.Host.exe 종속성을 제거하는 방법에 대한 의견을 많이 듣습니다 (Ben의 샘플에서 Worker 프로젝트 참조). 이상적으로 클래스 라이브러리는 (터미널이 Ben의 프로젝트에서했던 것처럼) 메시지를 보내고, 웹 애플리케이션은 가입자로서 이벤트를 처리하고 SignalR을 사용하여 메시지를 표시 할 수 있습니다. 내가의 Web.config가 그것을 커버 것이라고 생각하기 때문
업데이트는 현재 전 클래스 라이브러리 프로젝트의 구성 DLL을 도랑을했다. 그래서 내의 Web.config 이제 다음있다 같습니다
<section name="microsoft.web.services3" type="Microsoft.Web.Services3.Configuration.WebServicesConfiguration, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
<section name="MsmqSubscriptionStorageConfig" type="NServiceBus.Config.MsmqSubscriptionStorageConfig, NServiceBus.Core" />
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
<MsmqTransportConfig
InputQueue="WebQueue"
ErrorQueue="WebErrorQueue"
NumberOfWorkerThreads="1"
MaxRetries="5"
/>
<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="MessageEvents" Endpoint="WebQueue" />
</MessageEndpointMappings>
</UnicastBusConfig>
는 또한 http://docs.particular.net/nservicebus/messaging/publish-subscribe/에 따라 "NServiceBus_Subscriptions"라는 개인 tramsactional 큐를 만들었습니다. 당신의 의도가 구성이 잘못 로컬 다음 메시지를 보낼 경우
Bus = Configure
.WithWeb()
.DefaultBuilder()
.XmlSerializer()
.MsmqTransport()
.PurgeOnStartup(false)
.UnicastBus()
.LoadMessageHandlers()
.MsmqSubscriptionStorage()
.CreateBus()
.Start();
답변 해 주셔서 감사합니다. SendLocal() 시도 할 때 null 참조 예외가 발생합니다. 내 IMessage 개체가 아닙니다. NetscapeBus.Configure.With() '뒤에'MsmqSubscriptionStorage() '또는'DbSubscriptionStorage() '를 추가하십시오. "라는 메시지가 나타나면 Publish()를 시도하면"이 끝점에서 게시 할 수 없습니다. 그러나 .MsmqSubscriptionStorage()를 Global.asax.cs에서 내 .WithWeb() 호출로 연결하면 오류가 해결되지 않습니다. – Patrick