2008-10-29 63 views
3

我正在編寫一個C#控制檯應用程序,它接受一個二進制文件,將其分開,分析並將數據存儲到數據庫中。可以Biztalk運行控制檯應用程序?

我們希望使用BizTalk協調觀察一個新的二進制文件放在一個目錄中,並用要解析的文件名/名稱調用我的應用程序。

BizTalk是否可以運行命令行程序?
它可以傳遞命令行參數給程序嗎?
我如何向BizTalk報告上次運行是成功還是失敗?

謝謝
基思

回答

3

建議這樣做,但在理論上你可以一個表達式形狀中使用shell命令運行exe:

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

System.Diagnostics命名空間是在2006年的BizTalk可用,我不t認爲它在BizTalk 2004中可用(BizTalk 2004有一個非常有限的可用System名稱空間子集)。

我不確定要獲取返回值,但您應該可以提供參數。

有關C#shell命令的參考資料可以參考herehere

我個人認爲有三個可用更好的選擇給你:

  1. 不要使用BizTalk。

    正如Campbell所建議的,改用windows服務。

    如果您想利用現有的BizTalk框架(日誌記錄,報告等),或者如果您在BizTalk要執行的工作流中有其他任務,則只能使用BizTalk。 (把所有東西都放到一個平臺上是有爭議的 - 如果你使用BizTalk作爲一件事,那麼使用if for everything,但這是另外一次談話)。

  2. 重構你的碎紙機的邏輯成C#類庫,無論您的控制檯應用程序和BizTalk可以調用。

    調用從BizTalk類庫更容易清潔和有力執行,調用可執行文件會。

    從簡單的業務流程(創建爲業務流程變量)引用簽名和GACed組裝然後你可以直接從表達形狀調用它。

    here是這一篇文章,涵蓋了基礎知識。它沒有涉及很多醜陋的細節,也沒有提供關於最佳實踐的討論。 Professional BizTalk Server 2006是一本很好的書。

  3. 正如坎貝爾說,這個最可能可以用純淨的BizTalk功能來完成。

我想也許選項2和3的組合會最適合你想要的。把你已經擁有的二進制粉碎邏輯放入一個C#類庫中,並從BizTalk編排中調用它來處理文件監視,錯誤通知,跟蹤和與其他進程的集成。

+0

謝謝。我們今天舉行了會議,並決定這樣做。我已經將碎紙機寫成它自己的.DLL文件,而.EXE只是一個包裝/裝載機.DLL。我現在要去嘗試編寫一個適用於BizTalk的適配器DLL,並將其接入粉碎機。感謝您的鏈接。 – 2008-10-29 21:45:19

1

Biztalk的是服務器產品,因此會一直在,當你將它設置在生產環境後臺運行。

我建議如果你想使用BizTalk,你可以設置它來觀察文件將被丟棄的位置,將其拆分,分析,然後在BizTalk工作流程中寫出所有數據庫。它正是它設計要做的。工作流還可能包含通知,或者您可以使用BizTalk跟蹤來確認操作是否成功。您可能需要編寫的唯一自定義代碼是用於將二進制文件轉換爲XML的二進制文件的反彙編程序。這將作爲接收管道組件完成。

如果這就是你所做的,但BizTalk對於這一點來說是一個昂貴的選擇。我建議你編寫自己的Windows服務,並使用FileSystemWatcher來攔截文件已被寫入的事實,然後在C#代碼中進行處理。

+0

Biztalk已經準備就緒,正在用於其他操作(HL7)。執行此文件翻錄的引擎已經寫入。我只是試圖使用BizTalk將文件帶到應用程序,並報告是否有任何返回的錯誤代碼。謝謝。 – 2008-10-29 16:45:02

1

的BizTalk調用C#應用程序是怎麼樣的了,如果它的盒子。過去我們遇到過這樣的問題,我們將控制檯應用程序編寫或封裝爲Web服務。這樣,Biztalk就會選擇要刪除的文件並將其發送到應用程序Web服務應用程序。這屬於我們如何使用BizTalk的「瑞士軍刀」部分。這實在太不合時宜了。但是,BizTalk確實提供了諸如跟蹤,BAM,面向故障排隊等的功能。另外,我們還將文件複製到歸檔位置,從Web服務讀取結果代碼,並使用SMTP適配器發送成功或失敗通知。

希望這給你一些想法。祝你好運!

相關問題