[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查看。

原文地址:https://www.cnblogs.com/duanshuiliu/p/2784345.html