2012-01-26 2 views
4

저는 며칠 동안이 문제로 어려움을 겪었습니다.NServiceBus Bus.Send(). IIS/Windows Server 2008에서 작동하지 않음 (콜백)

IIS 및 Windows Server 2008 R2에서 호스팅되는 간단한 WCF 웹 서비스가 있습니다.

 var completionResult = new CompletionResult(); 
     var updateTextMessage = new UpdateText { TextTemplateId = textTemplateId, Text = text }; 

     var asyncResult = Global.Bus.Send(updateTextMessage).Register(x => completionResult = x.AsyncState as CompletionResult, null); 
     asyncResult.AsyncWaitHandle.WaitOne(10000); 

     if (completionResult.Messages != null && completionResult.Messages.Length > 0) 
     { 
      return ((UpdateTextResponse)completionResult.Messages[0]).ImageData; 
     } 

     return string.Empty; 

나는 동기 방식으로 NSB를 사용하려고 시도하는 것은 나쁜 디자인 간주하지만 난 그냥 실험 그리고 난 정말이 작업을 좀하고 싶습니다 알고 다음과 같이 웹 서비스의 구현입니다. 따라서 문제는 메시지가 원격 끝점으로 성공적으로 보내지고 메시지가 성공적으로 처리되지만 원격 끝 점이 Bus.Reply를 수행 할 때 응답 메시지가 ether에서 손실된다는 것입니다. NSB의 최신 버전을 사용하고 있는데 이상한 일은 제 Windows 7 개발 컴퓨터에서 잘 작동합니다. 두 컴퓨터에서 Active Directory가 해제되어 있는지 확인했습니다. 또한 수신 엔드 포인트에서 Wireshark를 실행했으며 패킷 데이터에 수신 메시지가 표시되는지 확인했습니다. 뭔가 IIS와 jive되지 않는 것 같습니다. 또한 양쪽 끝점에 대해 로깅 임계 값을 DEBUG로 전환했으며 이상한 일은 일어나지 않았습니다. 또한

IIS Config (this side is not getting the response) 

<MsmqTransportConfig InputQueue="Web.InputQueue" ErrorQueue="Web.ErrorQueue" MaxRetries="5" NumberOfWorkerThreads="1"/> 
    <UnicastBusConfig> 
    <MessageEndpointMappings> 
     <add Messages="Messages" Endpoint="Node.Distributor.DataInputQueue"/> 
    </MessageEndpointMappings> 
    </UnicastBusConfig> 

--------------------------------------------------------------- 

Endpoint which does the reply 

<MsmqTransportConfig ErrorQueue="Node.ErrorQueue" InputQueue="Node.InputQueue" MaxRetries="5" NumberOfWorkerThreads="1"/> 
<UnicastBusConfig DistributorControlAddress="Node.Distributor.ControlInputQueue" DistributorDataAddress="Node.Distributor.DataInputQueue" /> 

나 : 여기

 Bus = NServiceBus.Configure.WithWeb() 
      .Log4Net() 
      .DefaultBuilder() 
      .XmlSerializer() 
      .MsmqTransport() 
       .IsTransactional(false) 
       .PurgeOnStartup(false) 
      .UnicastBus() 
       .ImpersonateSender(false) 
      .CreateBus() 
      .Start(); 

는 엔드 포인트에 대한 CONFIGS 있습니다 : 송신 엔드 포인트는 여기에 웹 구성 요소에 대한 내 Application_Startup의 코드가 "에 ... 메시지를 보내는"보통 말한다 통신을 테스트하기 위해 두 개의 독립형 NServiceBusHost 응용 프로그램을 만들었고 성공적으로 작동했습니다. 나는 반송 주소를 하드 코딩하고 .Reply를 .Send로 대체했지만 실제 목적지를 지정했지만 여전히 작동하지 않았다. 다시 IIS와 관련이있는 것 같습니다. 어떤 도움이라도 대단히 감사하겠습니다!

+0

nservicebus 구성 정보를 게시 할 수 있습니까? 또한 버스의 주소를 확인할 가치가 있습니다. 원격 끝점에서 다시 확인()하십시오. – Rajesh

+0

오케이 configs를 게시했습니다. 감사! – thehin

답변

1

문제가 해결되었습니다. 답장에 대한 이유를 밝혀 것은 내가 같은 유통 업체를 참조했다는 사실에 기인 한 길을 잃지 :

<UnicastBusConfig DistributorControlAddress="[email protected]" DistributorDataAddress="[email protected]" /> 

하지만 그것은 NServiceBus 유통 업체가 IP를 좋아하지 않는 것으로 나타났다. 그래서 다음과 같이 변경했습니다 :

<UnicastBusConfig DistributorControlAddress="[email protected]" DistributorDataAddress="[email protected]" /> 

이 문제가 해결되었습니다. 또한 NSB/MSMQ가 호스트 이름을 사용하기 때문에 Windows에서 호스트 파일을 업데이트해야했습니다. 이것이 NServiceBus의 버그인지 또는 알려진 문제인지 여부는 확실하지 않지만 이미 알려지지 않은 경우 문서화해야합니다.

0

저에게 큐 사용 권한과 같은 소리가납니다. WCF 쪽에서 대기열을 확인하여 msmq가 메시지를 전달할 수 있는지 확인하십시오.

+0

응답 해 주셔서 감사합니다. 나는 권한이 좋은 것 같아. App Pool을 시작하기 전에 큐를 지우고 NSB가 WCF 서비스가 중단되면 큐를 생성 한 것으로 보입니다. 나는 심지어 "Everyone"사용자에게 WCF 사이드 큐 전체 제어권을 주었고 그게 도움이되지 못했습니다. – thehin

관련 문제