2010-12-29 3 views
0

У меня странная ситуация, которая появилась только в этой одной оркестровке, над которой я работаю.Сообщения BizTalk, переписывающие друг друга?

У меня есть сообщение получения. Я использую форму выражения и записываю ее в переменную «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 
+0

«Выписывая сообщения» Я предполагаю, что вы имеете в виду «отправить сообщение», используя форму «Отправить». Если это так, не могли бы вы проверить, действительно ли вы отправляете правильное сообщение в каждом случае. По вашему описанию вы должны иметь первую форму отправки, связанную с вашим вторым сообщением, и вторую форму отправки, связанную с вашим исходным сообщением. Это тот случай? –

+0

«Выписывая», я беру XML в сообщение и записываю его в таблицу журналов, чтобы убедиться, что он строит то, что должен, и содержит правильную информацию. – Stephanie

ответ

0

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

Я думаю, что вы столкнулись с one of the fundamental confusions разработчиком, пришедшим с фоновых встреч Java или VB6 при работе с C#.

C# является управляемым языком

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

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

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

В принципе, у вас есть две ссылки на то же содержание. А именно, две ссылки: xmlDoc2 и SecondMessage, которые относятся к назначенной строке.

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

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

Решение?

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

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

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