Может ли Biztalk запустить консольное приложение? - PullRequest
3 голосов
/ 29 октября 2008

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

Мы хотим использовать BizTalk для организации наблюдения, когда новый двоичный файл помещается в каталог, и вызова моего приложения с именем / именами файлов для анализа.

Может ли BizTalk запускать программу командной строки?
Может ли он передать параметры командной строки программе?
Как мне сообщить в BizTalk, что последний запуск был успешным или неудачным?

Спасибо,
Кит

Ответы [ 3 ]

3 голосов
/ 30 октября 2008

Я бы не рекомендовал бы сделать это, но теоретически вы можете запустить exe, используя команду shell в форме выражения:

System.Diagnostics.Process.Start(@"C:\yourPath\yourExecutable.exe")

Пространство имен System.Diagnostics доступно в BizTalk 2006, я не думаю, что оно доступно в BizTalk 2004 (BizTalk 2004 имел очень ограниченное подмножество доступного пространства имен System).

Я не уверен в получении возвращаемых значений, но вы, безусловно, должны иметь возможность предоставить параметры.

Некоторые ссылки на команды оболочки C # можно найти здесь и здесь .

Лично я думаю, что вам доступны три лучших варианта:

  1. Не используйте BizTalk.

    Как рекомендует Кэмпбелл, вместо этого используйте службу Windows.

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

  2. Реорганизовать логику вашего измельчителя в библиотеку классов C #, которую могут вызывать как ваше консольное приложение, так и BizTalk.

    Вызов библиотеки классов из BizTalk намного проще сделать чисто и надежно, чем вызов исполняемого файла.

    Просто укажите ссылку на вашу подписанную сборку и сборку GACed из оркестровки (создайте ее как переменную оркестровки), и затем вы сможете вызвать ее непосредственно из формы выражения.

    здесь - статья об этом, которая охватывает основы. Это не входит во многие уродливые детали или предлагает обсуждение лучших методов. Professional BizTalk Server 2006 - хорошая книга для этого.

  3. Как сказал Кэмпбелл, большая часть этого, вероятно, может быть выполнена с помощью чисто функциональных возможностей BizTalk.

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

1 голос
/ 01 декабря 2008

BizTalk вызывает C # -приложение, если его поле. У нас были подобные проблемы в прошлом, и у нас есть консольные приложения, написанные или упакованные как веб-сервис. Таким образом, Biztalk подхватывает удаляемый файл и отправляет его в приложение веб-службы приложения. Это подпадает под «швейцарский армейский нож», часть того, как мы используем BizTalk. Это действительно плохо. Тем не менее, BizTalk предоставляет такие вещи, как отслеживание, BAM, организация очередей при сбоях при удаленном доступе и т. Д. Кроме того, мы начали копировать файлы в места архивирования, считывать коды результатов из веб-служб и использовать адаптер SMTP для отправки уведомлений об успехе или сбое.

Надеюсь, это даст вам некоторые идеи. Желаем удачи!

1 голос
/ 29 октября 2008

Biztalk - это серверный продукт, поэтому он всегда будет работать в фоновом режиме при настройке в производственной среде.

Я бы предложил, чтобы, если вы хотите использовать BizTalk, вы настроили его так, чтобы он отслеживал место, куда будет сброшен файл, разбирал его на части, анализировал и затем записывал в базу данных в рамках рабочего процесса BizTalk. Это именно то, для чего он предназначен. Рабочий процесс также может содержать уведомления, или вы можете просто использовать отслеживание BizTalk, чтобы подтвердить, если операция прошла успешно. Единственный пользовательский код, который вам может понадобиться написать - это дизассемблер для вашего двоичного файла, чтобы превратить его в XML. Это будет сделано в качестве компонента приемного конвейера.

Если это все, что вы делаете, BizTalk - чертовски дорогой вариант только для этого. Я предлагаю вам написать свой собственный сервис Windows и использовать FileSystemWatcher , чтобы перехватить тот факт, что файл был записан, а затем выполнить обработку в вашем коде C #.

...