使用 Link3270 会话方式

会话方式允许客户机使用相同的网桥设施运行多个事务。 它比在单个事务方式下运行这些事务中的每个事务更高效。

会话方式支持以下操作:
  • 分配网桥设施
  • 正在运行的事务
  • 删除网桥设施
  • 交付大型消息
  • 发生通信故障时的恢复
注: 对于整个会话, USERID 必须相同,并且必须在每个 Link3270 请求中指定。

过程

  • 创建消息

    在发送每条消息之前,必须执行以下步骤:

    1. 将缺省网桥消息头 (BRIH) 移动到消息区域中。
    2. 对于除 allocate 以外的所有消息,将 BRIH_FACILITY 设置为 allocate 上返回的值。
    3. 根据需要修改消息的其他参数。
  • 分配网桥设施
    要分配网桥设施,客户机程序必须将网桥消息头 (BRIH) 的 BRIH_TRANSACTIONID 字段的值设置为 BRIHT-ALLOCATE-FACILITY。 有关 BRIH 的描述,请参阅 入站 Link3270 消息头 (BRIH)出站 Link3270 消息头 (BRIH) 。 还可以选择定义以下参数,但将忽略消息中的其他字段。
    • BRIH-设施保持时间
    • 类似于 BRIH-FACILITYLIKE
    • BRIH终端
    • BRIH-NETNAME
    注: 在运行第一个应用程序事务之前,不会验证客户机程序提供的 BRIH-FACILITYLIKE 值。 仅当处理第一个应用程序事务时,才会确定 AOR 区域,并且可以在所选 AOR 中验证类似事实的值。
    例如,要使用提供的缺省 BRIH 和常量来分配网桥设施:
    Working-Storage Section
    ...
    copy dfhbrico.
    ...
    Linkage Section
    01 msg-area
    copy DFHBRIHO.
    ...
    Procedure Division.
    ...
    move brih-default to msg-area.
    set briht-allocate-facility to true.
    EXEC CICS LINK PROGRAM('DFHL3270') COMMAREA(msg-area)
    LENGTH(length of brih) DATALENGTH(len)
    END-EXEC
    ...
    
  • 以会话方式运行事务

    通过在 Link3270 请求消息中的多个 BRIV 向量中提供所有终端输入,可以在 Link3270 网桥下作为简单的 "非会话式" 事务运行传统对话事务 (与终端进行多次交互)。 详情请参阅 “会话交易 ”。

    伪对话通常涉及一系列事务,每个事务都由先前的事务发起,也可能传递一些数据。 用户事务可以通过不同方式定义要运行的下一个事务的名称。 详情请参阅 “伪会话交易 ”。

    1. 客户机程序必须在网桥消息头 (BRIH) 的 BRIH_TRANSACTIONID 字段中提供用户事务的名称,并将 BRIH-FACILITY 设置为分配请求返回的值。
      还可以选择定义以下参数,但将忽略 BRIH 中的其他字段。
      • 布里赫-达塔利特
      • BRIH-会话任务
      • BRIH-GETWAITINTERVAL
      • BRIH-ADSDESCRIPTOR
      • BRIH-注意ID
      • BRIH-启动代码
      • BRIH-光标位置
      例如,要使用提供的缺省 BRIH 和常量来运行事务 NACT:
      Working-Storage Section..
      copy dfhbrico..
      Linkage Section.
      01 msg-area.
      copy DFHBRIHO.
      03 msg-vectors pic x(2000)..
      Procedure Division.
      move brih-default to msg-area
      move 'NACT' to brih-transactionid
      move facility to brih-facility
      move brih-datalength to len
      EXEC CICS LINK PROGRAM('DFHL3270') COMMAREA(msg-area)
      LENGTH(length of msg-area) DATALENGTH(len)
      END-EXEC..
      
    2. 您的客户机程序还必须为任何输入命令创建 BRIV 向量。
      注: 添加 BRIV 时,请始终记住递增BRIH-DATAL思。
      例如:
       move briv-receive-map-default to briv-in.
      move 'DFH0MNA ' to briv-rm-mapset.
      move 'ACCTMNU ' to briv-rm-map.
      move '422' to briv-rm-cposn.
      move length of acctmnui to briv-rm-data-len.
      set address of acctmnui to address of briv-rm-data.
      move low-values to acctmnui.
      add briv-rm-data-len to briv-input-vector-length.
      add briv-input-vector-length to brih-datalength.
      
  • 删除网桥设施

    当所有会话活动完成时,客户机可以删除网桥设施。 为此,客户机程序必须将 BRIH_TRANSACTIONID 字段的值设置为 BRIHT-DELETE-FACILITY ,并将 BRIH-FACILITY 设置为 ALLOCATE 请求返回的值。 将忽略消息中的其他字段。

    如果未显式删除网桥设施,那么如果在 BRIH-FACILITYKEEPTIME 字段或 BRMAXKEEPTIME 系统初始化参数中指定的时间内未使用该网桥设施,那么 CICS® 会将其调度为自动删除。 使用较小的时间间隔。

    例如,要使用提供的缺省 BRIH 和常量来删除网桥设施:
    Working-Storage Section..
    copy dfhbrico.
    Linkage Section.
    01 msg-area.
    copy DFHBRIHO..
    Procedure Division.
    move brih-default to msg-area
    set briht-delete-facility to true
    move facility to brih-facility
    move brih-datalength to len
    EXEC CICS LINK PROGRAM('DFHL3270') COMMAREA(msg-area)
    LENGTH(length of brih) DATALENGTH(len)
    END-EXEC..
    
  • 传递大型消息

    如果来自用户事务的输出消息大于在请求上传递的 COMMAREA 的大小,那么网桥机制将返回一个 BRIH 和所需数量的完整 BRIV 向量以适合返回的 COMMAREA。

    如果无法将整个出站消息放入 COMMAREA 中,那么字段BRIH-REMAININGDATAL思将设置为非零值。 然后,客户机可以发出一个或多个请求以获取其余数据。 为此,客户机程序必须将 BRIH-TRANSACTIONID 字段的值设置为 BRIHT-GET-MORE-MESSAGE ,并将 BRIH-FACILITY 设置为分配请求返回的值。 将忽略消息中的其他字段。

    这样, CICS 可以返回错误信息。 客户机应遵循 Translation considerations 中描述的 CICS 有关 COMMAREA 长度的建议:EXEC CICS 命令中的 LENGTH 选项

  • 从连接故障恢复

    如果在接收到响应消息之前通信连接失败,那么客户机可以重新连接到同一路由器,并请求再次发送该消息。 为此,客户机程序必须将 BRIH-TRANSACTIONID 字段的值设置为 BRIHT-RESEND-MESSAGE ,并将 BRIH-FACILITY 设置为分配请求返回的值。 将忽略消息中的其他字段。

    如果成功,出站 Link3270 网桥消息将包含尽可能多的可拟合到 COMMAREA 中的消息。 如果路由器或 AOR CICS 区域发生故障,那么返回的消息指示 facilitytoken 未知。

    如果不成功,那么输出是带有相应 BRIH-RETURNCODE 的 BRIHT-RESEND-MESSAGE 消息。

    注:
    1. 必须在分配请求的 BRIH-FACILITYKEEPTIME 中指定的时间间隔到期之前发送重新发送请求。 否则,将删除网桥设施和未完成的消息。
    2. 可以使用字段 BRIH-SEQNO 来检查先前请求是否有效。