动态消息类型发现和架构解析

Microsoft BizTalk Accelerator for SWIFT (A4SWIFT) 在 SWIFT 反汇编器和汇编器中启用动态消息类型发现和架构解析。

SWIFT 反汇编程序

SWIFT 反汇编程序 (DASM) 能够动态发现收到的消息的消息类型,并加载分析消息所需的相应架构。 此功能的最大好处是,可以使用 SWIFT 反汇编程序配置单个管道来处理任何 SWIFT 消息类型的 SWIFT 消息。 与本机 BizTalk 平面文件反汇编程序不同,SWIFT 反汇编程序不要求为A4SWIFT可能遇到的每种消息类型生成单独的接收管道。

如果假定在大多数情况下,系统接收的所有消息都以结构上同质的标头数据开头,则可以使用动态消息类型发现。 在标头数据中,是显示消息类型的字段。 对于 SWIFT 消息,标头数据由 SWIFT 消息块 1、2 和 3 组成,消息类型信息包含在块 2 (称为应用程序标头) 。

SWIFT DASM 组件可以立即处理所有“单个” (非批处理) SWIFT 消息,而无需设置任何属性。 默认情况下,未设置 SWIFT 交换架构和 SWIFT 标头架构;但是,SWIFT DASM 组件将使用 Microsoft.Solutions.FinancialServices.SWIFT.RuntimeSchemas.dll 中存在的 SWIFT 标头架构来动态检测 SWIFT 消息类型并处理消息。 此外,默认情况下会启用 BRE 和 XML 验证,因此将完全验证处理的任何消息。 将 SWIFT 标头架构属性设置为在 RuntimeSchemas.dll 中指向 SWIFT 标头也会导致上述行为相同。

当 SWIFT 反汇编程序的 SWIFT 标头架构配置属性 (默认) 设置为“None”时,反汇编程序通过执行以下步骤动态解析并加载相应的架构:

  1. 使用由 SWIFT 标头架构配置属性指定的用户指定的标头架构 () 分析接收消息的起始 (标头) 。

  2. 检查A4SWIFT_MessageType提升的属性字段生成的“标头 XML”。 如果此字段存在,它将字段值用作“消息类型”,然后继续执行步骤 4。 如果该字段不存在,则继续执行步骤 3。

  3. 如果反汇编程序) 找不到A4SWIFT_MessageType字段,则检查 (预期A4SWIFT_MessageType2提升属性字段的标头 XML。 使用A4SWIFT_MessageType2字段值作为“消息类型”。

  4. 如果在步骤 2 或步骤 3 中标识的“消息类型”为“574”,则 SWIFT 反汇编程序将检查消息类型“574”是否在双类型消息列表配置属性中指定的消息类型列表 (这是反汇编程序) 的属性。 如果是,则继续执行步骤 5。 如果否,请继续执行步骤 6。

  5. 检查A4SWIFT_SecondaryMessageType提升的属性字段的标头 XML。 如果此字段存在,反汇编程序将使用字段值 (例如,“IRSLST”) 作为“消息子类型”,并将其追加到“消息类型”,例如“574_IRSLST”。

    重要

    为步骤 5 提供的解释是简化 SWIFT 反汇编程序在评估消息子类型时实际执行的操作。 实际上,SWIFT 反汇编程序使用以下算法来确定消息类型是否具有子类型,如果是,该子类型如下所示。

    Given MT type number nxx ...  
    if nxx is in the Dual-Type list {  
      if field 119 exists AND field 119 is NOT null/empty {  
        if n == 1 {  
          if field 119 == "STP" {  
            Use MTnxxPLUS schema  
          } else if field 119 == "REMIT" {  
            Use MTnxx schema  
          } else {  
            Use MTnxx_<field 119> schema  
          }   
        } else {  
          // n != 1  
          Use MTnxx_<field 119> schema  
        }  
      } else {  
        // field 119 does not exist or 119 does exist but is null/empty  
        Use MTnxx schema  
      }  
    } else {  
      // nxx is not a dual-type message  
      Use MTnxx schema  
    }  
    
  6. 反汇编程序现在知道消息类型,它可以通过连接一些固定的架构命名前缀和后缀 ((如前缀中的“MT”)来形成交换架构名称,使“MT574_IRSLST”) 。

  7. 按名称 () 加载交换架构并分析整个消息, 从头开始,使用加载的架构 (这意味着反汇编程序分析标头数据两次:一次使用标头架构,再使用交换架构的开头) 。 交换架构必须能够分析整个消息,包括标头。

    注意

    反汇编程序可以使用所有A4SWIFT SWIFT 消息架构来分析整个 SWIFT 交换 (SWIFT 块 1、2、3、4 和 5) 。 反汇编程序仅使用默认 SWIFT 标头架构来分析块 1、2 和 3。 有关详细信息,请参阅下文。

    上述架构解析算法意味着,为了使动态消息类型发现正常工作,SWIFT 标头架构必须包含反汇编程序使用以下升级属性 (在 A4SWIFT 属性架构、Microsoft.Solutions.A4SWIFT.Property.PropertySchema) 中定义的字段:

  • A4SWIFT_MessageType

  • 如果使用A4SWIFT_MessageTypes ,则 A4SWIFT_MessageType2 ( 可选)

  • A4SWIFT_SecondaryMessageType (可选)

    有关这些属性和其他升级属性的详细信息,请参阅 A4SWIFT_* 提升的属性

注意

如果将 SWIFT 标头架构设置为 “无”,则应为 SWIFT 交换架构属性指定完整的 交换架构 。 在这种情况下,反汇编程序使用指定的交换架构来分析A4SWIFT接收的所有消息。 也就是说,禁用动态架构解析,并将管道配置为仅接收类型与指定交换架构匹配的消息。

A4SWIFT (Microsoft.Solutions.FinancialServices.SWIFT.RuntimeSchemas.HeaderSchema) 安装默认的 SWIFT 标头架构,该架构可以分析 SWIFT 标准标头数据,并具有必要的提升属性来促进动态架构解析。

默认 SWIFT 标头架构具有以下升级字段:

  • SWIFTHeader/ApplicationHeaderBlock_Input/MessageType。 反汇编程序使用 A4SWIFT_MessageType 属性对此进行升级。

  • SWIFTHeader/ApplicationHeaderBlock_Output/MessageType。 反汇编程序使用 A4SWIFT_MessageType2 属性对此进行升级。

  • SWIFTHeader/UserHeaderBlock/ValidationFlag_119。 反汇编程序使用 A4SWIFT_MessageType 属性对此进行升级。

    如果将 SWIFT 标头架构和 SWIFT 交换架构配置属性都设置为“None”,则反汇编程序默认使用 Microsoft.Solutions.FinancialServices.SWIFT.RuntimeSchemas.HeaderSchema 作为标头架构。

SWIFT 汇编程序

与 SWIFT 反汇编程序一样,SWIFT 汇编程序能够动态发现出站消息的消息类型,并加载序列化消息所需的相应架构。 使用此功能,可以使用 SWIFT 汇编程序配置单个管道,以处理任何 SWIFT 消息类型的 SWIFT 消息。 与本机 BizTalk 平面文件汇编程序不同,SWIFT 汇编程序不要求你为A4SWIFT可能遇到的每种消息类型生成单独的发送管道。

SWIFT 汇编程序中的动态架构解析比 SWIFT 反汇编程序简单得多,因为汇编程序执行将 XML 序列化回 SWIFT 平面文件格式的工作。 BizTalk Server提供给 SWIFT 汇编程序进行序列化的 XML 包含消息类型和架构信息,SWIFT 汇编程序可以直接使用这些信息来加载适当的架构进行序列化。 因此,SWIFT 汇编程序对标头和交换架构没有任何可配置性:它始终使用 XML 中指定的架构,该架构将序列化。

另请参阅

使用 SWIFT 反汇编程序和汇编程序