簡體   English   中英

在 Biztalk Orchestration 中創建新消息的最佳方法是什么?

[英]What is the best way to create a new message within a Biztalk Orchestration?

我正在尋找您的最佳解決方案,用於基於要在 Biztalk 編排中使用的預定義 XSD 架構創建新消息實例。

額外的投票用於帶有清晰有效示例的答案或帶有高質量參考鏈接的答案。

當想要在 BizTalk 業務流程中創建消息的新實例時,有多種選擇。

我已經描述了我通常最終使用的三個,並在答案的底部添加了一些鏈接。

如何定義最好的方法實際上取決於 - XMLDocument 方法在某些方面是最整潔的,除非您的架構發生更改,這可能會在您不知情的情況下中斷。 Scott Colestock描述了一些減輕這種風險的方法。

BizTalk Mapping 方法可能是最容易理解的,並且不會在架構更改時中斷。 對於小型模式,這可能是一個不錯的選擇。

對於所有這些方法,需要記住的重要一點是,如果您想使用區分字段或提升的屬性,您將需要創建空元素來填充。 如果您嘗試為缺失的元素分配值(即使這些元素可能是可選的),您將遇到運行時XLANG錯誤

BizTalk 地圖

最簡單的選擇是只使用 BizTalk 映射 - 您甚至不需要將任何內容映射到創建的實例中。

要創建空元素,您只需在帶有空字符串參數的字符串連接 functoid 中進行映射。

將一封郵件分配給另一封郵件

如果要創建消息的新實例,只需將一條消息以消息分配形狀復制到具有相同架構的另一條​​消息即可。

使用 XMLDocument 變量

為此,您創建一個XMLDocument類型的編排變量,然后在message assignment使用LoadXML方法加載與您的架構匹配的 XML 片段。 然后將XMLDocument分配給所需的 BizTalk 消息。

varXMLDoc.LoadXml(@"<ns0:SomeXML><AnElementToPopulate></AnElementToPopulate></SomeXML>");  
msgYourMessage = varXMLDom;

包含AnElementToPopulate允許您使用屬性提升來分配給它。

我很少記得這樣做的語法, 是我的博客條目,用於提醒自己語法。

此處的另一個鏈接詳細介紹了一些方法。

你究竟在尋找什么? 是否只是創建具有固定內容的新消息(例如某種模板)? 還是基於別的東西? 您確實需要澄清問題並更加具體以獲得正確的答案。

如果您指的是僅基於某種硬編碼內容(或接近)從頭開始創建消息,那么我發現將它們作為嵌入資源放入輔助 C# 程序集中是一種非常干凈的方法。

要創建新消息,您只需創建一個新System.Xml.XmlDocument並將其分配給消息變量。 您可以使用它的LoadLoadXml方法來加載符合架構的所需內容。

本教程可能會有所幫助:

BizTalk Server 2006 教程 - 使用 BizTalk Server 2006 R2 和 Windows Communication Foundation 通過契約優先設計創建服務的過程演練

http://dotnet.sys-con.com/node/647092

xsd.exe /classes /namespace:MyNamespace myschemafile.xsd

您可以使用它為給定的架構文件生成 c# 類。 結果是一個 .cs 文件,您可以將其包含在您的解決方案項目之一中。

在“消息分配形狀”中使用時,您可以實例化這些生成的類之一,為它的所有屬性填寫值,然后最后將消息部分分配給您的實例。 Biztalk 將自動神奇地為您序列化實例。 很好,OO。 不需要任何花哨的 xlang 東西。

對於其他一些解決方案,例如使用硬編碼的 XML 加載臨時 XmlDocument,或者使用其他人建議的 documentSpecification.GetDocSchema().CreateXmlInstance(),我真的沒有太多運氣。

查看我的博客文章 - 在 BizTalk 中創建消息的樂趣- 以了解各種選項之間的基本性能比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM