메시지 버스를 통해 WCF 전송을 확장 중이므로 요청 - 응답 모드가 제대로 작동합니다. 입출력 모드를 구현할 때 문제가 발생했습니다. 상황은 다음과 같습니다.IsOneWay = true 인 경우 WCF 서비스 코드가 호출되지 않았습니다.
1, InputChannel 및 OutputChannel을 만들고 TransportBindingElement가이를 반환하도록했습니다.
2, 나는 두 가지 방법으로 계약 인터페이스를 만들었습니다. 하나는 IsOneWay = true라고 말하며, Method1이라고 가정 해 봅시다. 다른 하나는 Method2라는 이름이 아닙니다.
3, Method1을 호출하면 InputChannel 및 OutputChannel 대신 RequestChannel 및 ReplyChannel이 표시됨을 알 수 있습니다. 그리고 응답 채널은 WCF 메시지를 수신하고 RequestContext를 되돌릴 수 있습니다. 그러나 서비스 코드가 호출되지 않았습니다.
4, IsOneWay = Method1에 false로 설정하면 제대로 작동합니다.
4 Method2를 호출하면 제대로 작동합니다.
5, IsOneWay = true 인 단 하나의 메서드 만 가진 다른 서비스 계약을 만들었습니다. 이 메서드를 호출하면 WCF가 InputChannel 및 OutputChannel을 제공하고 제대로 작동합니다 (서비스 코드 실행).
내 질문 : 1, IsOneWay = true 메서드 및 IsOWayWay = false 메서드가있는 서비스가있는 경우 WCF는 요청 회신 채널을 올바르게 제공합니까?
2 메서드를 IsOneWay = true 일뿐만 아니라 같은 서비스 계약에서 IsOneWay = false 메서드를 사용하여 서비스 호출을 처리하는 방법은 무엇입니까?
BTW, IsOneWay = true 메서드에 대한 요청 메시지의 경우 MessageID가 NULL 인 것으로 나타났습니다. 요청 메시지에 새 ID를 설정했지만 서비스 코드가 여전히 호출되지 않았습니다.
예, 실제로 가장 좋은 방법은 요청 - 응답 용 서비스와 한 가지 방법에 대해서만 서비스를 이용하는 것입니다. 하지만 사용자 정의 된 전송 계층을 구현하고 있음을 알고 있습니다. 즉 모든 종류의 서비스 구현과 호스트를 지원하는 것이 좋습니다. WCF가 사용자에게 요청 - 응답과 단방향 서비스를 제공 할 수있게하는 경우, 최선의 방법은 아니지만이를 지원해야합니다. –
내 대답을 업데이트했습니다 –
휴 (Hugh)에게 감사하지만 라우팅 서비스를 구현하지 않습니다. 사실, WCF를 확장하여 엔터프라이즈 메시지 버스를 전송 계층으로 사용하려고합니다. 따라서 내 확장 프로그램을 사용하면 개발자가 다양한 서비스를 전송할 수 있습니다. 하나의 서비스 계약에서 IsOneWay = true와 false를 모두 정의해도 괜찮다면 지원해야합니다. 그리고 HTTP, NET.TCP 및 MSMQ와 같은 빌트인 전송이 모두 지원되어야한다고 생각합니다. –