2010-12-21 3 views
1

다양한 MSMQ에서 메시지를 가져 오는 Windows 서비스가 있습니다. 이 서비스는 큐에서 메시지를 가져온 다음 메시지가 들어온 큐를 기반으로 특정 워크 플로를 실행합니다. 끝점에서 메시지를 수락하고 큐에 배치하도록 WCF 서비스를 구성 할 수 있습니까? 서비스에 여러 끝점이 있어야하며 메시지를받은 끝점에 따라 메시지가 다른 큐에 저장됩니다. 나는 netMsmqBinding에 관한 것들을 보았지만, 지금까지는 이것이 내가 생각하고있는 사용을위한 것인지를 결정할 수 없었다. 어떤 도움에 감사드립니다WCF 사용 MSMQ 대기열로 직접 보내기

,

마이크

답변

0

내가이 문제를 해결할 수 있었던 방법은 구성 이름을 전달할 수있는 사용자 지정 ServiceHost 클래스를 만드는 것입니다. 이것은 서비스 구현 유형 이름을 사용하여 구성을 찾는 기본 구현의 대안입니다. 이를 통해 동일한 시스템에서 동일한 구현의 여러 인스턴스를 실행할 수있었습니다. 그 외에도 커스텀 서비스 클래스 내에서 메시지를 수신하기 위해 모든 엔드 포인트에 첨부 할 사용자 정의 MessageInspector를 추가했습니다. 그런 다음 IDispatchMessageInspector.AfterReceiveRequest() 메서드를 사용하여 수신 메시지를 가져온 다음 구성 내에서 정의한 큐에 배치합니다. 조금 복잡하지만 시나리오에서는 완벽하게 작동합니다.

1

내가 제대로이 무엇입니까 - 당신이

  • 외부 세계에 노출 된 WCF 서비스가
  • 가에 따라 여러 개의 엔드 포인트를 사용하여 갖고 싶어 메시지가 WCF 서비스로 들어오는 엔드 포인트는 메시지를 별도의 MSMQ 큐에 넣어야합니까?

모든 끝점을 외부에 노출시키고 들어오는 메시지를 MSMQ 대기열에 놓을 WCF 서비스를 확실히 가질 수 있습니다. WCF 서비스 메서드 내부에서 요청이 들어온 끝점을 알 수 있는지 여부를 확신 할 수 없습니다. 일반적으로 WCF 서비스 클래스는 요청의 출처에 대해 전혀 알지 못합니다. 일반적으로 알 필요가 없습니다 ...).

나는 여기에 몇 가지 방법을 참조하십시오

  • 는, 엔드 포인트 각 (유형)에 대한 하나를 여러 서비스가; 그들은 모두 자신의 코드와 모든 것을 공유 할 수 있지만 별도의 서비스 클래스에이를 분리하는 경우, 각 서비스 클래스는 본질적으로 가 이렇게 역할을, 어떤 엔드 포인트

  • 에 정보를 넣어 어떤 MSMQ 대기열 알 수 알 것 어떻게하면 메시지를 넣을 지 알려주는 메시지와 함께 일부 헤더 정보를 보낼 수있는 방법을 찾으십시오. WCF 4.0에서는 메시지를 넣을 위치를 알려줍니다.

  • 새 WCF 라우팅 서비스로 뭔가를 할 수 있습니다. 그러나 그것이 어떻게 작동 할 것인가 - 그것은 어떤 종류의 "힌트"를 요구할 것이기 때문에 그것은 어떤 종단점이 호출되었는지, 그리고 들어오는 메시지를 라우팅하는 방법을 알려준다.

0

net.msmq 바인딩을 사용하면 큐 읽기 WCF 서비스가 존재하지 않아도 WCF 클라이언트가 MSMQ 큐에 직접 쓸 수 있습니다. 존재하지 않아도됩니다. net.msmq Y 인딩은 대기열에서 자동 읽기를 허용합니다. MessageQueue를 사용하여 큐에 쓰거나 큐에서 읽을 수 없습니다.