2011-03-17 6 views
0

다른 Windows 서비스와 통신해야하는 Windows 서비스가있는 응용 프로그램을 작성하고 있습니다. "대상"서비스는 "원본"서비스의 요청을 수락하고 작업을 수행합니다. "소스"서비스는 응답을 기다리지 않으므로 요청은 가능한 빨리 반환되어야합니다.WCF와의 통신

"대상"서비스 호스트에서 "원본"과 통신 할 WCF 서비스를 계획했습니다. 요청을 받으면 작업을 수행하도록 호스트 Windows 서비스와 통신해야합니다. 나는 "대상"WCF 서비스가 "대상"Windows 서비스가 모니터링 할 MSMQ에 메시지를 넣을 것이라고 생각했습니다. 이 작업이 완료되면 WCF 서비스는 호출자에게 다시 되돌아 갈 수 있습니다.

WCF 서비스가 호스팅 Windows 서비스에 작업을 수행하도록 허용하는 것은 현명한 접근 방식입니까?

친절 감사

마이클

답변

0

그래, 그건 좋은 방법입니다. MSMQ는이 작업에 완벽합니다. 원본 서비스는 WCF를 통해 큐에 메시지를 넣어서 대상에 요청을 보낼 수 있습니다. MSMQ는 특히 응답을 다시받을 필요가없는 경우 비동기 처리를 위해 서비스에 요청을 보내려 할 때 유용합니다. 응답이 필요한 경우 원본을 WCF 서비스로 설정할 수도 있으며 대상은 필요한 경우 메시지를 다시 보낼 수 있습니다. MSMQ 바인딩을 사용하여이를 수행하는 몇 가지 다른 방법이 있습니다.

+0

WCF 서비스에서 MSMQ 바인딩을 사용하고 큐에 메시지를 넣고 대기열 서비스를 모니터링하여 작업을 수행하는 TcpBinding WCF 서비스를 갖는 대신 실제 작업을 수행 하시겠습니까? – Michael

+0

TcpBinding없이이 작업을 수행 할 수 있으며 원본 및 대상 Windows 서비스 만 있으면됩니다. 클라이언트 (소스)와 서버 (대상) 모두에서 MSMQ 바인딩을 사용합니다. 대상은 MSMQ 끝점이있는 WCF 서비스 호스트를 호스팅하는 Windows 서비스 일 수 있습니다. 원본 측에는 대상 끝점에 연결하는 WCF MSMQ 클라이언트 바인딩이 있습니다. 소스가 WCF MSMQ를 통해 메시지를 보내면 대상이 자동으로 메시지를 선택합니다.이 시점에서 대상 서비스에서 직접해야하지만 처리 할 수 ​​있습니다. –

1

내가 동의하지 못하게하십시오. "목표"WCF 서비스와 호스팅 Windows 서비스 사이에서 통신하기 위해 MSMQ를 사용하면 설명 된 내용 만 토대로합니다. MSMQ를 사용하면 서로 다른 프로세스가 장애가없는 방식으로 통신 할 수 있습니다. 귀하의 경우 WCF 서비스는 Windows 서비스와 동일한 프로세스에서 호스팅됩니다. 따라서 MSMQ는 둘 사이의 통신 메커니즘으로 작동하지만 필요한 것은 아닙니다.

또한, "대상"WCF 서비스와 "소스"WCF 서비스 사이의 바인딩 MSMQ를 사용하여 두 개의 WCF 서비스가 항상 동시에 실행하지 않는 경우 의미가 있습니다. 예를 들어 "대상"WCF 서비스가 항상 실행되고 있지 않으면 MSMQ 바인딩은 "원본"WCF 서비스가 작업을 계속 보낼 수있게합니다. 이러한 작업은 "대상"WCF 서비스가 실행될 때 검색 할 MSMQ에 저장됩니다. 그러나 두 서비스가 모두 실행되는 것처럼 들리므로 MSMQ 바인딩의 필요성을 알 수 없습니다.

WCF 바인딩을 선택하려면이 SO 게시물을 참조하십시오.

C# - WCF - inter-process communication

나에게 한 가지를 해결하자. "대상"WCF 서비스가 "원본"에서 작업 요청을 받으면 Windows 서비스로 다시 작업을 전달하는 것만으로는 아무 것도 할 수 없습니다. Windows 서비스가 실행 중입니다. 그렇지만 활용할 수있는 실행 스레드가 없습니다. 요점은 비동기 작업 처리를 위해 작업을 관리하기 위해 스레드를 시작해야한다는 것입니다. 이 작업을 수행하려면 ThreadPool을 활용하는 것이 좋습니다.

희망이 도움이됩니다.

0

@ 매트

도움 주셔서 감사합니다.

조금 더 생각한 후 사용법을 설정하고 사용하는 것이 더 쉬운 방법을 확인하십시오."target"서비스가 "source"로 작업 결과를 다시 보내야 할 필요가 있으므로 nettcp를 사용하고 콜백을 사용합니다. 그런 다음 계획은 새 스레드를 설정하고 작업을 완료 한 다음 "완료"하여 응답을 다시 "원본"으로 보냅니다.

@ 앤디

도움 주셔서 감사합니다.

msmq를 살펴 봤지만 메시지를 받으면 새 스레드를 설치해야하므로 웹 서비스에서 작업을 수행 할 수 있습니다.

+0

좋은 접근 방법이라고 생각합니다. 행운을 빕니다! –