Используя BizTalk 2013r2 CU1, я создал схему свойств для моего входящего xsd и развернул приложение.BizTalk - не удалось повысить свойства
Когда я получаю образец XML-документа с использованием стандартного конвейера «xml receive», я вижу, что необходимый элемент продвигается в контекст, как ожидалось.
Затем я создал собственный конвейер, который содержит компонент «дизассемблер XML» на этапе «Разборка» и пользовательский компонент на этапе «Проверить». Этот пользовательский компонент должен прочитать продвинутое свойство из контекста. Тем не менее, я обнаружил, что, когда я переключаю приемное местоположение из конвейера «xml receive» на мой собственный конвейер, моя собственность не получает повышение. Я использую следующий код в моем пользовательском компоненте выписать список элементов в контексте сообщения:
for (int x = 0; x < contextList.CountProperties; x++)
{
contextList.ReadAt(x, out name, out nspace);
string value = contextList.Read(name, nspace).ToString();
contextItems += "Name: " + name + " - " + "Namespace: " + nspace + " - " + value + "\r\n";
if (name == _ContextPropertyName && nspace == _ContextPropertyNamespace)
promotedPropFound = true;
}
Helpers.EventLogHelper eventHelper = new EventLogHelper();
eventHelper.LogEvent(string.Format("Context items:{0}", contextItems));
if (promotedPropFound == false)
throw new Exception(string.Format("Unable to find promoted property with name[{0}] and namespace [{1}]", _ContextPropertyName, _ContextPropertyNamespace));
От выхода в журнале событиях можно увидеть, что некоторые свойства, такие как MessageType были повышены, но мой обычное свойство нет. Опять же, если я изменю местоположение приема обратно на использование стандартного конвейера «xml receive», тогда свойство будет продвигаться из копии того же XML-документа (я проверяю это, останавливая подписной порт отправки и просматривая контекст из консоли администратора).
Я нахожу это очень странным, поскольку тот же компонент «дизассемблер XML» присутствует на одном и том же этапе «Разборка» обоих конвейеров с той же (по умолчанию) конфигурацией. Я начинаю думать, возможно, есть проблема с 2013r2CU1 - кто-нибудь еще столкнулся с тем же?
Спасибо за подробный ответ Гэри, я думаю, вы можете быть правы. Моя проблема теперь в том, как подключить это. Насколько я вижу, делегат AfterLastReadEvent не принимает контекст конвейера, доступ к которому я должен иметь. У меня нет большого опыта работы с делегатами - знаете ли вы, возможно ли передать контекст конвейера при возникновении события? –
@RobBowman Да, возможно. Я обновил свой ответ для этого. Я предполагаю, что вы хотите передать контекст сообщения, а не контекст конвейера. –
Спасибо за обновление Гэри. Извините, это заставляет меня так долго, но в настоящее время у меня есть только 20 минут каждое утро, чтобы поработать над этим. Знаете ли вы ссылку на пример использования EventingReadStream? Я не смог его найти. В моем событии «DoSomething» у меня теперь есть код, который выполняет требуемую карту. Моя проблема теперь в том, что я не знаю, как вернуть это значение потоку. Должен ли я передавать поток в качестве параметра ref для события, то любое обновление к нему приведет к его внедрению в BizTalk? –