Сообщения BizTalk перезаписывают друг друга? - PullRequest
0 голосов
/ 29 декабря 2010

У меня странная ситуация, которая возникла только в этой единственной оркестровке, над которой я работаю.

Мне пришло сообщение Receive. Я использую форму Expression и записываю ее в переменную "xmlDoc«Так что я могу проверить, что в нем.Затем у меня есть форма «Назначение сообщения», в которой я загружаю строку XML в переменную «xmlDoc2», назначаю эту переменную второму сообщению и записываю его, чтобы я мог проверить его.Затем у меня появляется другая форма выражения, и я пытаюсь снова записать первое сообщение, и оно, по-видимому, заменено информацией второго сообщения.

Оно не имеет параллельной формы, а назначение сообщений только создает второе сообщение.Между получением и тем, где я вижу эту проблему, я делаю несколько фигур Определить и строю другие сообщения из сообщения получения.Все они работают нормально и ничего не перезаписывают (делают те же процессы, что я пытаюсь сделать позже.)

Кто-нибудь видел это раньше или видит что-то, чего мне не хватает?

ETA: Процесс работает примерно так:

Send Message comes in
xmlDoc = Send Message
xmlDoc.OuterXml is written to a table
xmlDoc2 = "<root><xml></xml></root>"
Second Message = xmlDoc2
xmlDoc2.OuterXml is written to a table
xmlDoc = Send Message <-- What should happen
xmlDoc = Second Message <-- What is happening

1 Ответ

0 голосов
/ 06 января 2011

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

Я думаю, что вы, возможно, пострадали от одного из фундаментальных заблуждений разработчика, пришедшего из Java или VB6, когда он работает с C #.

C # - управляемый язык

Пожалуйста, помните, что C # - это управляемый язык, так как он использует сборщик мусора для восстановления неиспользуемых ссылок на объекты. Ключевое слово здесь Ссылка .

Когда вы пишете следующие строки:

xmlDoc2 = "<root><xml/></root>";
SecondMessage = xmlDoc2;

По сути, у вас есть две ссылки на один и тот же контент. А именно, две ссылки xmlDoc2 и SecondMessage , которые ссылаются на назначенную строку.

Таким образом, в зависимости от кода, который вы используете для «записи» содержимого XML ваших сообщений BizTalk, вы можете перезаписывать некоторые ссылки.

Кроме того, если это происходит в контексте формы Construct, вы можете непреднамеренно перезаписать содержимое самого сообщения BizTalk.

Решение?

Эта проблема обычно не проявляется при работе с BizTalk. Я лично никогда не сталкивался с этой проблемой.

Если вы обновите свой исходный вопрос точным кодом как для форм выражения, так и для формы назначения, я дополню этот ответ более подходящим руководством.

...