MSMQ를 사용하는 WCF 서비스를 만들었습니다.
여러 .NET 클라이언트가이 서비스를 사용하고 메시지를 보낼 수 있어야합니다.
부분적으로 클라이언트는 WCF가없는 .NET 버전 (예 : .NET 1.1)으로 작성됩니다.
이러한 클라이언트의 경우 Msmq API를 직접 사용합니다.
메시지의 인코딩이 서비스 측의 예상 인코딩과 맞지 않는 것이 문제입니다.
그래서 나는 customBinding
사용하여 서비스 측의 메시지 인코딩을 변경하려고 :레거시 클라이언트에서 WCF 서비스 사용 (MSMQ 사용)
<bindings>
<customBinding>
<binding name="MyCustomBinding">
<!-- available encodings: -->
<!-- <textMessageEncoding /> -->
<!-- <binaryMessageEncoding /> -->
<!-- <mtomMessageEncoding /> -->
<!-- <webMessageEncoding /> -->
<msmqTransport ...>
<msmqTransportSecurity ... />
</msmqTransport>
</binding>
</customBinding>
</bindings>
내가 네 미리 정의 된 인코딩 중 하나로 제한하고 추측 : textMessageEncoding
, binaryMessageEncoding
, mtomMessageEncoding
, webMessageEncoding
.
System.Messaging.Message msmqMessage = new System.Messaging.Message();
msmqMessage.Formatter = new System.Messaging.ActiveXMessageFormatter();
//msmqMessage.Formatter = new System.Messaging.BinaryMessageFormatter();
//msmqMessage.Formatter = new System.Messaging.XMLMessageFormatter();
어떤 포맷이 예상 인코딩으로 적합하지 보인다 :
는 클라이언트 측에서 나는 포맷을 변경했습니다. 인코딩을 통합하는 또 다른 방법이 있습니까? 아마도 맞춤 인코더 또는 이와 비슷한 것일 수 있습니까? 아니면 포맷터 및 인코더 조정이 완전히 잘못 되었습니까?미리 감사드립니다.
Thx. 그래서 두 번째 대기열을 듣고'MsmqMessage'을 취하는 두 번째 계약을 구현해야합니까? –
예를 들어, 각 클라이언트의 다른 버전에 대해 두 번째 끝점을 노출해야합니다. 단, wcf 클라이언트가 바인딩과 일치시켜 레거시 끝점을 사용할 수도 있습니다. –
'msmqIntegrationBinding'을 사용할 때 왜 메타 데이터가 거의 없는지 아십니까? 나는 내가 사용할 수있는 방법으로 서비스 프록시를 필요로하지 않는다는 것을 안다. 그러나 데이터 계약은 얻는 것이 좋을 것이다. 어떤 아이디어? –