本部分介绍在编写逻辑单元应用程序 (LUA) 应用程序时需要考虑的 SNA 信息。
绑定检查
在初始化 LU 会话期间,主机向 LUA 应用程序发送一条 BIND 消息,其中包含请求/响应单元 (RU) 大小等信息,供 LU 会话使用。 Microsoft® Host Integration Server 将此消息返回到 RUI_READ 上的 LUA 应用程序。 LUA 应用程序必须验证 BIND 上指定的参数是否合适。 应用程序具有以下选项:
它可以通过发出包含对 BIND 的正常响应 RUI_WRITE 来接受 BIND。 不能在响应中发送其他 BIND 数据。
它可以尝试协商一个或多个 BIND 参数。 (仅当 BIND 可协商时才允许这样做。) 为此,应用程序会发出包含 OK 响应 RUI_WRITE ,但将修改后的 BIND 作为数据包含在内。
它可以通过发出包含负面响应 RUI_WRITE ,使用适当的 SNA 感知代码作为数据来拒绝 BIND。
LUA 应用程序负责验证 BIND 参数并确保发送的所有消息都与它们一致。 但是,以下两个限制适用:
主机集成服务器拒绝指定 RU 长度大于 BIND 上指定大小的任何 RUI_WRITE 。
主机集成服务器要求 BIND 指定辅助 LU 是争用优胜者,错误恢复由争用失败者负责。
注意
对于 SLI,如果应用程序将执行任何 BIND 检查,则必须指定 它将在 SLI_OPEN上使用 SLI_BIND_ROUTINE 。
礼貌确认
主机集成服务器会记录从主机收到的请求,以便将应用程序发送的任何响应与相应的请求相关联。 当应用程序发送响应时,Host Integration Server 会将响应与原始请求中的数据相关联,然后可以释放与之关联的存储。
如果主机指定异常响应仅 (可以发送负面响应,但不应) 发送正面响应,则主机集成服务器仍必须保留请求的记录,以防应用程序随后发送负面响应。 如果应用程序未发送响应,则无法释放与此请求关联的存储。
因此,主机集成服务器使 LUA 应用程序能够对主机发出的仅异常响应请求发出正面响应。 (这称为礼貌确认。) 响应不会发送到主机,但由 LUA 用来清除与请求关联的存储。
注意
应用程序不需要为每个仅限异常响应的请求发送礼貌确认。 为了提高效率,应用程序可以降低响应频率。 节点将礼貌确认视为所有先前挂起请求的隐式确认。
将 SNA 感知代码与其他辅助返回代码区分开来
非感知代码的辅助返回代码在其前两个字节中始终包含值零。
SNA 感知代码在其前两个字节中始终包含非零值。 第一个字节提供感知代码类别,第二个字节标识该类别中的特定感知代码。 (第三个和第四个字节可以包含其他信息,也可以是零。)
有关 SNA 感知代码的信息
如果需要有关返回的感知代码的信息,请参阅
负面响应和 SNA 感知代码
在以下情况下,SNA 感知代码可返回到 LUA 应用程序:
当主机从 LUA 应用程序向请求发送负面响应时,它包含一个 SNA 感知代码,指示负面响应的原因。 这会在后续 RUI_READ 或 SLI_RECEIVE 上报告给应用程序,其中包含以下信息。
感知代码 说明 主要返回代码 LUA_OK。 请求/响应指示器、响应类型指示器和包含的感知数据指示器 全部设置为 1,表示包含感知数据的负面响应。 返回的数据 SNA 感知代码。 当主机集成服务器从主机接收无效数据时,它通常会向主机发送负面响应,并且不会将无效数据传递给 LUA 应用程序。 这会在后续 RUI_READ、SLI_RECEIVE、 RUI_BID或SLI_BID 上报告给应用程序,其中包含以下信息:
感知代码 说明 主要返回代码 LUA_NEGATIVE_RESPONSE。 辅助返回代码 发送到主机的 SNA 感知代码。 在某些情况下,主机集成服务器检测到主机提供的数据无效,但无法确定要发送的正确感知代码。 在这种情况下,它会将异常请求中的无效数据 (EXR) 传递到 RUI_READ 或 SLI_RECEIVE 上的 LUA 应用程序,并附带以下信息。
感知代码 说明 请求/响应指示器 设置为 0,表示请求。 感知数据包含的指示器 设置为 1,表示包含感知数据。 (此指示器通常仅用于 response.) 消息数据 建议的 SNA 感知代码。 然后,应用程序必须向消息发送负面响应。 它可以使用 Host Integration Server 建议的感知代码,也可以更改感知代码。
Host Integration Server 可以向应用程序发送感知代码,以指示应用程序提供的数据无效。 此信息在 RUI_WRITE 或 SLI_SEND 上报告给应用程序。
感知代码 说明 主要返回代码 LUA_UNSUCCESSFUL。 辅助返回代码 SNA 感知代码。 WINLUA 中列出了可以作为 LUA 谓词的辅助返回代码的感知代码。H 头文件。 有关此文件,请参阅 Host Integration Server 或 SNA SDK。
起 搏
起搏由 LUA 接口处理。 LUA 应用程序不需要控制起搏,也不应设置起搏指示器标志。
如果正在对从 LUA 应用程序发送到由 BIND) 确定的主机 (的数据使用节奏, 则RUI_WRITE 或 SLI_SEND 可能需要一些时间才能完成。 这是因为 LUA 必须等待主机的节奏响应,然后才能发送更多数据。
如果 LUA 应用程序向一个方向传输大量数据,或者从主机 ((例如,文件传输应用程序) ),则主机配置应指定在该方向使用节奏。 这可确保接收数据的节点不会充斥数据,也不会耗尽数据存储。
将数据清除到链的末尾
当主机将请求单位链发送到 LUA 应用程序时,应用程序可以等到收到链中的最后一个 RU 后再发送响应,也可以向不是链中最后一个 RU 的 RU 发送负面响应。 如果在链中发送了负面响应,则 LUA 会清除此链中的所有后续 RU,并且不会将它们发送到应用程序。
当 LUA 收到链中的最后一个 RU 时,它会通过将 RUI_READ 或 RUI_BID 的主要返回代码设置为LUA_NEGATIVE_RESPONSE,以零次级返回代码来向应用程序指示这一点。
主机可以通过在链中发送诸如 CANCEL 之类的消息来终止链。 在这种情况下,CANCEL 消息将在RUI_READ返回到应用程序。 不使用LUA_NEGATIVE_RESPONSE返回代码。
分段
RU 分段由 LUA 接口处理。 LUA 始终将完整的 RU 传递给应用程序,应用程序应将完整的 RU 传递给 LUA。