BizTalk Получение двоичного файла, сопоставленного с RecievedFileName

У меня проблема с маршрутизацией сообщения двоичного файла в работающий экземпляр Orchestration с использованием корреляции свойства контекста: ReceivedFileName. Корреляция инициализируется с помощью отправки с фиктивным файлом, где в Orchestration задается свойство контекста ReceivedFileName сообщения, и свойство получает повышение. После этого сбой маршрутизации полученного сообщения (как XmlDocument), и я вижу, что свойство контекста ReveivedFileName этого сообщения не было повышено, должно ли быть так? Я не могу придумать, как его продвигать, поэтому я просто хочу убедиться, что это должно быть так.

Имена файлов идентичны, но я заметил, что свойство ReceivedFileName сообщения отправки не имеет пути, тогда как полученное сообщение имеет путь + имя файла. Я попытался добавить путь к отправляемому сообщению (хотя звучит странно, прочитайте его где-нибудь), но это не меняет результат.


person Mustin    schedule 16.04.2014    source источник
comment
Извините, но ваше описание проблемы не совсем ясно, что вы пытаетесь сделать, и некоторые термины не совпадают с другими. Можете ли вы кратко описать результат, который вы ищете?   -  person Johns-305    schedule 16.04.2014
comment
Получение маршрутизации двоичного файла для запущенного экземпляра оркестровки. Использовали корреляцию в свойстве контекста: ReceivedFileName, инициализировали при отправке формы и продвигались при отправке (msg(FILE.ReceivedFileName) = MyBinFile;). однако после получения двоичного файла свойство ReceivedFileName не продвигается, и я подозреваю, что это причина сбоя маршрутизации.   -  person Mustin    schedule 16.04.2014
comment
Как вы продвигаете FILE.ReceivedFileName? В оркестровке вы должны использовать метод корреляции.   -  person Johns-305    schedule 16.04.2014
comment
Да, я использую корреляцию. У меня есть тип корреляции, в котором для свойств корреляции задан тип FILE.ReceivedFileName. И, как я уже упоминал, я вижу, что свойство продвигается при отправке, но при получении свойства оно не продвигается.   -  person Mustin    schedule 22.04.2014


Ответы (2)


Хотя вы можете установить свойства контекста в оркестровке, они не продвигаются.

Вы должны использовать метод корреляции, описанный здесь, чтобы продвигать свойства, когда они попадают в MessageBox: http://blogs.biztalk360.com/property-promotion-inside-orchestration/

По сути, вы инициализируете набор корреляций на основе свойств, которые вам нужно продвигать.

person Johns-305    schedule 16.04.2014
comment
Да, и это именно то, что я делаю, создайте тип корреляции FILE.ReceivedFileName, инициализируйте его в форме отправки, и он будет продвигаться при отправке. Но позже, при получении двоичного файла в месте получения (форма получения настроена на соответствие корреляции), маршрутизация завершается ошибкой, и я вижу, что FILE.ReceivedFileName не продвигается для этого сообщения. Имена файлов идентичны. Я думаю, что я должен объяснить процесс более подробно. должно быть что-то еще, что препятствует маршрутизации. - person Mustin; 17.04.2014
comment
Если у вас включена маршрутизация сообщений о сбоях, все свойства, которые ранее были повышены, будут понижены, чтобы предотвратить непрерывный цикл, поэтому то, что вы видите, скорее всего, нормально. - person Johns-305; 17.04.2014
comment
Мустин. Вы продвигаете File.ReceivedFileName при получении двоичного файла? Когда этот файл будет получен, вам нужно будет продвигать FILE.ReceivedFileName в компоненте конвейера. - person brunch; 17.04.2014
comment
Я также должен упомянуть, что вы можете убедиться, что FILE.ReceivedFileName продвигается в оркестровке, остановив целевой порт отправки, а затем изучив контекст. - person Johns-305; 17.04.2014
comment
Бен – Хорошо, значит, мне нужен конвейерный компонент, чтобы продвигать недвижимость такого типа? - person Mustin; 22.04.2014
comment
Нет, вы можете продвигать его в оркестровке. Но если вы просматриваете сообщение о сбое, оно не будет продвигаться. Это ожидаемое поведение. - person Johns-305; 22.04.2014
comment
я не получил повышение для работы на принимающей стороне с корреляцией. однако подход @BenRunchey сработал, я пытался избежать нестандартного конвейерного решения, но можно только так сильно разочароваться;) - person Mustin; 25.04.2014

Как указал Бен Ранчи в комментарии выше, нужно прибегнуть к пользовательскому конвейеру и продвигать там FILE.ReceivedFileName, вызвав:

messag.Context.Promote("ReceivedFileName", "http://schemas.microsoft.com/BizTalk/2003/file-properties", receivedFileName);

Я также удалил путь из FILE.ReceivedFileName, чтобы иметь только имя файла, вызвав inmsg.Context.Read("ReceivedFileName", "http://schemas.microsoft.com/BizTalk/2003/file-properties")

и изменил значение и записал его обратно, вызвав:

inmsg.Context.Write("ReceivedFileName", "http://schemas.microsoft.com/BizTalk/2003/file-properties", receivedFileName);
person Mustin    schedule 25.04.2014
comment
В качестве примечания, поскольку вам нужно продвигать это значение самостоятельно, было бы лучше определить собственное пользовательское свойство, а не повторно использовать системное свойство. Однако продвижение FILE.ReceivedFileName будет работать нормально. - person Johns-305; 25.04.2014