我正在使用股票WCF MessageRouter示例在Silverlight客户端和任意数量的后端Web服务之间路由消息。这很有效。
现在我需要解决一些Web服务需要SAML联合并使用WsFederationHttpBinding的问题。
假设我可以正确解决为用户获取SAML令牌的问题,我希望能够通过BasicHttpBinding将消息传入路由器,并以某种方式将SAML令牌与SAML令牌一起插入到传出的WsFederationHttpBinding中为了将消息路由到最终目的地。
我假设在两种情况下身体中的序列化对象是相同的(我知道它在WsFed情况下是加密的,但我希望加密体的明文是相同的。)
我想要的是一种为WsFederationHttpBinding端点创建客户端的方法,并以某种方式将读者从BasicHttpBinding消息传递给现有的消息体,而不必从对象开始。请记住,我在路由器中,除了http地址之外,不知道目标服务。
有没有人知道如果我在WCF中有任何扩展点可以利用它来实现这个目标?
回顾一下我有一条SOAP 1.1消息,我想采用SOAPAction,XML消息体(输入对象的序列化形式)和SAML令牌,并希望说服WCF将这些输入转换为适当的WsFederationBinding兼容目标服务的消息,在路由器上进行最少的消息操作/检查。
答案 0 :(得分:1)
这实际上很容易。您可以设置第二跳所需的任何绑定,然后使用soap12作为消息类型以及原始soap11消息中的操作和正文创建新消息。
消息消息= Message.CreateMessage(MessageVersion.Soap12WSAddressing10,soap11MsgAction, new XmlTextReader(new StringReader(soap11MsgBody)));
如果您通过WSHttpBinding发送此消息,则可以正常工作。