2011-10-06 4 views
1

연결되어 있거나 연결되지 않은 원격 클라이언트에서 메시지를 대기시킬 수 있는지 테스트하려는 경우 해당 클라이언트가 인터넷을 통해 msmq로 보낸 메시지를 밀어 넣습니다. IIS 6에서 호스팅됩니다.IIS 6에서 MSMQ 호스팅 및 WCF를 통해 메시지 보내기

이제 IIS2005를 호스팅하는 server2003에서 MSMQ를 설정했습니다. 이 작업을 마친 후에는 "MSMQ"가 IIS 기본 웹 사이트에 나타납니다.

그렇다면 컴퓨터 관리 -> 메시지 대기열을 통해 새로운 트랜잭션 개인 큐를 추가했습니다.

내가 원하는 것은 메시지 스택을 보는 것입니다.이 작업을 마친 후 처리해 드리겠습니다. ,

<configuration> 
    <system.serviceModel> 
    <client> 
     <endpoint 
     address="net.msmq://**.**.***.228/private/MarksTestHttpQueue" 
     binding="netMsmqBinding" 
     bindingConfiguration="srmpBinding" 
     contract="HttpMsmqBridgeLibrary.IHttpMsmqBridgeContract"> 
     </endpoint> 
    </client> 
    <bindings> 
     <netMsmqBinding> 
     <binding name="srmpBinding" 
       queueTransferProtocol="Srmp"> 
      <security mode="None"/> 
     </binding> 
     </netMsmqBinding> 
    </bindings> 
    </system.serviceModel> 
</configuration> 

는 IP가 작동하는 내 공개 직면 IP입니다 :

 using (var contract = new HttpMsmqBridgeProxy()) 
    { 
     var valueToSend = 2456; 
     contract.TestFunction(valueToSend); 
     Console.WriteLine("value sent: " + valueToSend + "\r\n"); 
    } 

여기에이 클라이언트의의 app.config가있다 :

지금, 나는 다음과 같은 코드가 클라이언트 응용 프로그램을 만든 나는 wcf 서비스 또는 웹 페이지를 잘 호스팅 할 수 있습니다. 나는 srmpBinding을 사용하기 위해이 안내서를 따라 갔다. I 앱이 성공할입니다 실행할 때

http://msdn.microsoft.com/en-us/library/aa395217.aspx

그래서, 짧은에 무슨 일이 내 클라이언트의 메시지 큐에 가서 새로운 큐가 보내는 폴더에 게재 될, 그것은 보낸 나에게 말한다, 발생 전화 :

직접 : http : // .. * .228/msmq/private $/MarksTestHttpQueue

이 큐에서 보내는 메시지가 없으므로 메시지를 보낸 것으로 간주합니다.

지금 winserver2003에서 내 msmq를 보면 대기중인 대기중인 메시지가 없습니다.

ETA :

 var queue = new MessageQueue("FormatName:DIRECT=http://**.**.***.228/msmq/private$/nonTransQueue"); 
    System.Messaging.Message Msg; 
    Msg = new System.Messaging.Message(); 
    Msg.Formatter = new ActiveXMessageFormatter(); 
    Msg.Body = "Testing"; 
    queue.Send(Msg); 

메시지

합니다 (system32를/MSMQ/매핑 디렉토리에있는 매핑 파일을 변경 후) 표시 잘 : 나는 고전 MessageQueue가의 implimintation를 사용하여 비 트랜잭션 큐에 메시지를 보낼 수 있습니다 . IIS6 때문에 net.msmq 바인딩을 사용하여 보낼 수 없게되는지 궁금합니다.

+0

HTTP를 통해 트랜잭션 대기열로 보내는 경우 보낸 사람은 대상에서 보낸 ACK 메시지를 수신하기 위해 로컬로 설치된 HTTP 지원이있는 MSMQ가 필요합니다. 비 트랜잭션 큐로 보내는 것은 그렇지 않습니다. –

답변

1

IIS6에서 호스팅되는 WCF 서비스가 메시지를 처리하지 못할 수도 있습니다. 이는 IIS6이 http가 아닌 요청에 대해 프로세스를 인스턴스화하는 WAS을 사용하지 않기 때문입니다. 그러나 이것이 워크 플로우에서 수행중인 모든 작업을 수행 한 후에 발생한다고 생각합니다. 나는 원격 큐에 메시지를 밀어 당신이 당신의 클라이언트를 실행

  • 을 기대하는 메시지가
  • 이 당신의 WCF 서비스가 하지 픽업 메시지가에 호스팅 않기 때문에
  • 원격 큐에 나타납니다
  • IIS6이므로 원격 대기열에 메시지가 남아 있습니다.

어쨌든 IIS가 작동하지 않을 때까지 IIS가 관련되어 있다고 생각하지 않습니다.

간단한 테스트는 서버에서 서비스를 자체 호스팅하는 것입니다 (예 : 콘솔 앱에서 실행하십시오. IIS7과 마찬가지로 MSMQ 메시지를 받아 들일 수 있으며,이를 귀하의 장비에서 잠재적 인 문제로 제거 할 것입니다.

메시지를 클라이언트에서 서버의 트랜잭션 대기열로 직접 푸시 할 수 있는지 여부를 테스트 할 수도 있습니다. 다른 컴퓨터의 트랜잭션 대기열로 메시지를 보내는 데 문제가있는 경우 MSDTC 로그를 확인할 수 있습니다. 나는 거기에 대해 탐구해야하는 것을 부러워하지 않는다.

관련 문제