[英]Send Biztalk message context to WCF service
使用WCF適配器時,我將消息主體部分作為WCF消息的主體發送,但是我可以做為使Biztalk消息上下文也要發送(希望在WCF消息頭中)嗎?
MSDN中的以下頁面簡要說明了使用WCF適配器在BizTalk外部發送消息時如何使用自定義SOAP標頭。
基本上,您不能直接在BizTalk外部發送BizTalk消息的上下文。 這是沒有意義的。 而是,您可以在BizTalk消息的上下文中選擇屬性的子集,以通過自定義SOAP頭發送到WCF適配器。
處理來自WCF請求的自定義SOAP標頭
與傳出請求關聯的SOAP標頭必須顯式寫入到傳出消息的上下文中。
使用WCF適配器時,SOAP頭是使用內置的WCF.OutboundCustomHeaders上下文屬性定義的。 此屬性保存所有自定義SOAP標頭,並包裝在附加的<headers>標記內。
可以在業務流程中使用Expression形狀中的以下語法指定標頭:
OutboundMessage(WCF.OutboundCustomHeaders) = "" +
"<headers>"
"<tns1:Header1 xmlns:tns1='http://tns1'>" +
"</tns1:Header1>" +
"<tns2:Header2 xmlns:tns2='http://tns2'>" +
"</tns2:Header2>" +
"</headers>" +
"";
請注意,上面用於說明目的的自定義SOAP標頭<tns1:Header1>和<tns2:Header2>必須是WCF服務合同的一部分。 當為使用的WCF服務創建服務引用時,這些自定義SOAP標頭將在業務流程中用作生成的架構。
如何在自定義SOAP標頭中發送特定的上下文屬性
現在,您知道如何指定自定義SOAP標頭,您可以使用此語法將消息上下文中的特定屬性發送到自定義SOAP標頭,如下所示:
OutboundMessage(WCF.OutboundCustomHeaders) =
System.String.Format(
"" +
"<headers>"
"<tns1:Header1 xmlns:tns1='http://tns1'>" +
" <tns1:Property1>{0}</tns1:Property1>" +
" <tns1:Property2>{1}</tns1:Property2>" +
"</tns1:Header1>" +
"</headers>" +
""
, InboundMessage(FILE.ReceivedFileName)
, InboundMessage(BTS.MessageType)
));
在上面的示例中,已選擇兩個內置上下文屬性FILE.ReceivedFileName和BTS.MessageType並將其寫入自定義SOAP標頭中。 在現實世界中,您需要在使用屬性之前檢查屬性是否存在於上下文中。
您也可以使用任何自定義上下文屬性,只要已在適當的屬性模式中聲明了它們即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.