Выполнение небезопасного вызова DLL в BizTalk Orchestration (или запуск только одной оркестровки за раз) - PullRequest
0 голосов
/ 18 августа 2011

У меня проблема со сторонней DLL, которая НЕ является поточно-ориентированной, но которую мне нужно вызвать в оркестровке.

Я делаю вызов DLL в форме выражения. Одна и та же DLL вызывается в разных оркестровках.

Проблема, с которой я столкнулся, состоит в том, что для серии входящих сообщений BizTalk будет запускать несколько оркестровок (или несколько экземпляров оркестровки) параллельно - что приводит к исключениям внутри DLL.

Есть ли способ обойти это, учитывая, что рефакторинг DLL не вариант. Или есть способ ограничить BizTalk для запуска только одной оркестровки за один раз. (Я видел некоторые хаки, ограничивающие рабочий пул числом процессоров, но это, похоже, не помогает. Мы не можем перейти на одноядерный компьютер!)

Я бы предпочел найти способ сделать DLL счастливой (хотя я не могу придумать, как это сделать), чем ограничить BizTalk - но если есть способ регулирования, это было бы приемлемым краткосрочным решением, пока мы обсуждаем с 3-м вечеринка. (кто крупная организация и действительно должна знать лучше!)

1 Ответ

1 голос
/ 18 августа 2011

Даже на одноядерном компьютере BizTalk будет выполнять одновременную оркестровку.

Вы можете регулировать оркестровку, применяя в оркестровке шаблон синглтона.

Вы делаете это, создавая цикл в оркестровке и имея две принимающие фигуры, одну до начала цикла и одну внутри цикла.

Оба этих приема связаны с одним и тем же входящим логическим портом.

Вы создаете набор корреляции, который указывает что-то вроде BTS.MessageType, и устанавливаете первую форму приема, чтобы инициировать корреляцию, и второй прием, чтобы следовать корреляции.

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

Однако использование синглетонов - это дизайнерское решение, которое имеет недостатки. Например, пропускная способность страдает, и вы должны убедиться, что ваш синглтон не может приостановить работу, иначе он создаст блок для всех последующих сообщений.

Надеюсь, это поможет.

...