2010-06-15 20 views
0

我使用庫存WCF MessageRouter示例在Silverlight客戶端和任意數量的後端Web服務之間路由消息。這很好。從BasicHttpBinding轉換爲WsFederationHttpBinding的WCF路由器

現在我需要解決一些Web服務需要SAML聯合並使用WsFederationHttpBinding的問題。

假設我可以正確解決爲用戶獲取SAML令牌的問題,我希望能夠通過BasicHttpBinding將消息帶入路由器,並以某種方式將SAML令牌插入到傳出的WsFederationHttpBinding中以便將消息路由到其最終目的地。我假設身體中的序列化對象在這兩種情況下是相同的(我知道它在WsFed情況下加密,但我希望加密身體的明文是相同的)。

我想要的是一種創建客戶端到WsFederationHttpBinding端點的方法,並以某種方式將它從BasicHttpBinding消息中傳遞給現有消息主體,而不必從一個對象開始。請記住,我在路由器中不知道除http地址以外的目標服務。

有誰知道如果WCF中的任何擴展點可以利用來實現這一點?

只是回顧我有一個SOAP 1.1消息進來,我想要採取SOAPAction,XML消息體(輸入對象的序列化形式)和SAML令牌,並希望說服WCF將這些輸入嵌入到適當的WsFederationBinding目標服務的兼容消息在路由器上的消息操作/檢查最少。

+0

.NET 4或.NET 3.5 ?? – 2010-06-15 19:46:26

+0

任何一個。 4如果這更容易。 – mattx 2010-06-15 20:17:59

回答

1

這其實很簡單。您可以爲第二跳設置任何需要的綁定,然後使用soap12作爲消息類型以及原始soap11消息中的動作和主體來創建新消息。消息消息= Message.CreateMessage(MessageVersion.Soap12WSAddressing10,soap11MsgAction, new XmlTextReader(new StringReader(soap11MsgBody)));

如果您通過WSHttpBinding發送此消息,它工作正常。