2010-11-19 3 views
0

При использовании адаптера WCF у меня есть часть тела сообщения, отправляемая как тело сообщения WCF, но могу ли я сделать так, чтобы контекст сообщения Biztalk также отправлялся (надеюсь, в пределах заголовок сообщения WCF)?Отправить контекст сообщения Biztalk для службы WCF

ответ

2

following page in MSDN кратко объясняет, как использовать пользовательские заголовки SOAP при отправке сообщений вне BizTalk с помощью адаптеров WCF.

В принципе, вы не можете напрямую отправлять контекст своих сообщений BizTalk за пределы BizTalk. Это было бы бессмысленно. Скорее, вы можете выбрать подмножество свойств в контексте ваших сообщений BizTalk, которые должны быть отправлены в адаптер WCF через пользовательские заголовки SOAP.

Обработка пользовательских SOAP-заголовков Исходящий WCF Request

SOAP заголовки, связанные с исходящего запроса необходимо явно записать в контексте исходящего сообщения.

При использовании адаптеров WCF заголовки SOAP определяются со встроенным свойством контекста WCF.OutboundCustomHeaders. Это свойство содержит все пользовательские заголовки SOAP, завернутые в дополнительные < заголовки > тег.

Заголовки могут быть определены внутри оркестровке с помощью следующего синтаксиса в форме буквы 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: Заголовок 2 > используется для иллюстрации цели, указанные выше, должны быть частью вашего контракта на обслуживание WCF. Когда вы создаете ссылку на службу для используемой службы WCF, эти пользовательские заголовки SOAP будут доступны в виде сгенерированных схем в вашей оркестровке.

Как отправить специфические свойства Context в пользовательском заголовке 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) 
)); 

В приведенном выше примере, два контекста BUILTIN свойства FILE.ReceivedFileName и BTS.MessageType были отобраны и записаны в заголовке пользовательских SOAP. В сценарии реального мира вы хотите проверить, существуют ли свойства в контексте перед их использованием.

Вы также можете использовать любое пользовательское свойство контекста, если они были объявлены в соответствующей схеме свойств.

+0

Это неправда. Сообщение Biztalk является результатом обработки многозадачного файла EDI. Каждая запись распаковывается в отдельные сообщения BizTalk. Информация заголовка EDI превращается в свойства контекста в каждом сообщении BizTalk. Значит, эта информация не имеет смысла. – Rich

+0

Ну, как я уже сказал, это бессмысленно * вне * BizTalk. Вам действительно нужно * преобразовать * или * адаптировать * (некоторые из) свойства в контексте ваших сообщений BizTalk к пользовательским заголовкам WCF Soap. Эти заголовки мыла должны быть частью контракта с внешней службой. Пожалуйста, взгляните на страницу, с которой я связан. Если вам нужен базовый обзор различий в обработке заголовков Soap между WCF и SOAP-адаптерами, пожалуйста, посмотрите мой блог: http://maximelabelle.wordpress.com/2010/09/16/handling-soap-headers -в-BizTalk-ФОС-услуги / –

Смежные вопросы