[AX]AX2012 AIF(一):概覽


AX2012 AIF(Application integration framework)以WCF為基礎,擴展了WCF的HTTP 和HTTPS綁定。早期AX版本中的MSMQ和BIZTALK適配器已經不再使用。

AIF作為WCF服務是在AOS中宿主的,可以在Intranet環境中使用,如果要在Internet環境下使用則需要使用IIS來宿主。早期版本AX的IIS宿主程序通過.NET Bussiness connector和AOS通信,在2012中IIS則是通過WCF服務例程和AOS通信,所有的請求路由到AOS由AOS處理。

AX2012中AIF的入站消息數據可以是XML數據也可以是二進制流,出站數據也可以是通過XSLT轉換的XML數據,或者通過.NET程序集來轉化。可以使用批XML的方式來提交大量的數據,這樣可以把消息組合成消息集形成XML文檔來投遞。

AX2012使用集成端口(Integration port)替代了WCF中端點(endpoint)的概念,每個集成端口暴露一個或者多個服務,使用唯一的URI和端口地址來定位。集成端口分基本集成端口和增強集成端口兩種。基本集成端口由開發人員創建,比如在AOT中創建一個自動部署的服務組時,與此關聯的基本集成端口也同時被創建。增強集成端口是在System administration->Setup中手工創建的,與基本端口不同的是,它可以宿主在IIS上,可以指定HTTP、NetTCP、MSMQ等適配器類型,還可以執行指定的預處理及后處理等。開發人員可以創建Service group來分組一系列相關的服務,方便了對服務的管理。

AX2012中有四種適配器可用:HTTP、NetTCP、MSMQ和文件系統適配器。

在AX2012中有三種服務類型,自定義服務、文檔服務和系統服務。

  • 自定義服務有開發人員通過X++創建接口來實現,用於暴露自定義的業務邏輯,可用宿主在AOS或者IIS,支持出入站變換但不支持管道等。
  • 文檔服務用於呈現AX的數據和業務邏輯,數據由Axd開頭的文檔類來定義,比如銷售訂單的文檔類AxdSalesOrder,AX提供了超過70個標准文檔服務,如果不能滿足要求,可以使用AIF Document Service Wizard工具從自定義Query創建自己的文檔服務。文檔服務也可以宿主在AOS或者IIS上,支持所有類型的出入站變換及管道等。
  • 系統服務是AX內建支持的,不能夠自定義,包括Query服務、MetaData服務、User session服務等,通過這些服務可以獲取AOT對象,從Query返回數據等。系統服務只能宿主在AOS上,而且是獨立運行在固定的地址上,不能通過集成端口來配置,也只支持NetTCP這一種適配器。

自定義服務和文檔服務都可以用於暴露AX的業務邏輯與數據,但就應用場景上來講兩種有不同的側重點。文檔服務基於查詢使用AIF Document service wizard工具創建,它會自動處理數據源之間的關系,而自定義服務使用的Data contract類需要開發人員手工編寫;文檔服務的入站XML由服務框架處理,AxD架構會自動驗證數據,而自定義服務使用.NET的XML序列化/反序列化到Data contract對象,對於復雜的數據模型需要大量的自定義代碼來解析數據;文檔服務可以疊加使用管道、變換器、架構約束等,而自定義服務只能使用變換器;Office插件內建對文檔服務的支持,可以在office中調用這些服務來處理AX數據,顯然自定義服務在office不是內建支持的。總的來說,自定義服務可以用在數據復雜度較小的場合,文檔服務則更適合用在數據架構復雜的場合。

AX AIF提供的服務可以被多種客戶端消化,包括AX客戶端程序、Office AX插件、企業門戶,以及自開發的C#程序等。AIF的整體架構如下圖:

消息可以組合在一起成為Batched message,使用batchId標識包含的一組單個消息,還可以包含conversionId指定一個會話ID,一個會話可以包含多個批消息。批消息在處理時先分解出單個消息,如果入站端口可以配置為並行處理消息(選中Process requests in parallel),且Upon error in batched requests配置為Continue時,這一組消息會被並行處理,如果有多個AOS,這些消息可能在多個AOS上處理,而如果只有1個AOS,會啟動多個線程來同時處理消息,線程總數由宏#define.MaximumInboundParallelMessages定義的數量來確定,默認為1000。消息的處理順序可以用下表來說明:

消息類型

端口並行處理激活

端口未激活並行處理

單個消息

消息被分布到單個或多個AOS處理,順序不確定

消息在單個AOS處理,在單個批處理操作中根據消息的文件名(file name)按照字符順序依次處理。

批消息

批消息分解為單個消息,消息分散到單個或多個AOS處理,處理順序不確定。

批消息分解為單個消息后在單個AOS處理,在單次批處理操作中根據消息文件名按照字符順序依次處理。

會話

所有相同會話ID的消息在同一個AOS根據消息文件名按照字符順序處理。

會話ID被忽略。

要使消息得到真正的處理,需要啟動以下幾個批處理服務:

  • AIFGatewayReceiveService 由它和適配器通信,從外界消息源獲取消息放到入站消息的處理隊列
  • AIFInboundProcessingService 由它從入站消息隊列取出各個消息,按照規則交由相應的端口做實際的處理
  • AIFOutboundProcessingService 由它在各出站端口處理出站消息,給消息加上封頭然后提交到發送隊列等待發送
  • AIFGatewaySendService 由它從出站消息隊列取出消息發送到目的源

一般來講這幾個批處理服務按照上述的順序依次執行,它們作為任務放在同一個批處理Job中依次執行。

出入站端口的具體配置在System administration > Setup > Services and Application Integration Framework > Inbound ports和System administration > Setup > Services and Application Integration Framework > Outbound ports,具體的配置方法可參見http://msdn.microsoft.com/en-us/library/aa496471.aspx的內容,這里不做介紹。需要說明的是這些配置信息可以導出再導入到另一個環境中,比如我們在開發環境中開發完畢准備發不到生產系統,就可以從開發環境中導出這些配置,再導入到生產環境。導出導入需要用到命令行工具AXUtil.exe,雖然不是直接使用它,必須確認這個工具已經安裝。真正的導出操作是在System administration > Common > Data export/import > Definition groups,新建一個數據組定義,對入站端口配置選擇AifInboundPort作為根表並選擇與它相關的表,對出站端口配置選擇AifOutboundPort做為根表並選擇與它相關的表,然后就可以導出為.dat文件,在目的文件中使用System administration > Common > Data export/import > Import從這個.dat文件中導入相應的配置。

AIF的執行記錄可以在System administration > Periodic > Services and Application Integration Framework > History查看,在這里能看到所有的消息記錄,也可以檢查消息的具體內容以及相關的文檔表記錄。

排隊中等待處理的消息可以在System administration > Periodic > Services and Application Integration Framework > Queue manager查看,可以在這個form刪除或者修改狀態為Hold或者Error的消息,也可以將這些消息狀態手工更新為Ready以重新投遞這些消息。

AIF執行中的錯誤信息可以在 System administration > Periodic > Services and Application Integration Framework > Exceptions查看。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM