z/OS 客户端 Web 支持工具包:请求 (HWTHRQST) 失败并显示 HWTH-COMMUNICATION-ERROR (262)

问题描述

我一直在大型机上的 COBOL 程序中成功使用 z/OS 客户端 Web 支持工具包来调用外部 REST API(非 HTTPS)。但是,我遇到了一种情况,对同一 API 的请求失败并显示错误 HWTH-COMMUNICATION-ERROR(返回代码 262)。

这是我在诊断区看到的:

  • 请求失败 (HWTHRQST)
  • 返回代码:262(HWTH-COMMUNICATION-ERROR)
  • 服务:000524288
  • 原因代码:140
  • 原因描述:EDC5140I 管道损坏。

我无法确定是什么导致它在某些情况下失败。谁能帮我了解可能是什么问题?

这是执行失败的详细日志:

t: HWTH_OPT_VERBOSE has been set to HWTH_VERBOSE_ON
t-Entry: iconnImpl
t-Entry: initTranslationTables
t-Exit: initTranslationTables
t: Connecting to XX.XXX.XX.XXX via port 8080
t: Attempting to connect to IP address: XX.XXX.XX.XXX
t-Entry: setSocketoptions
t-Exit: setSocketoptions
t: Connection established using socket: 0
t-Entry: checkForTTLS
t: ATTLS detection OK: s=0 pol=OFF
t: Socket maps to TTLSRule: (none)
t: ATTLS is *not* in effect
t: Connected to origin server with socket: 0
t-Exit: iconnImpl
t: HWTH_OPT_VERBOSE has been set to HWTH_VERBOSE_ON
t-Entry: sendrqst
t-Entry: sendrqstImpl
t-Entry: appendRequestLine
t: No proxy is being used for the request
ÝHWTHCKST¨ (no request cookies specified)
ÝHWTHCKST¨ getCookieHeader() - No applicable cookies found
t: No applicable cookies found
t: * * * * * HTTP REQUEST HEADERS * * * * *
t-Entry: cleanseReqHdrs
t: GET /rest/validate/results.json
t: * * * * * END HTTP REQUEST HEADERS * * * * *
t-Entry: translate
t-Exit: translate
t-Entry: sendInlineRequest
t-Entry: doSend
t-Entry: ignoreSignal
t: Unable to query current action for signal: 13 error: EDC5157I. An internal error has occurred.
t: Unable to ignore signal(s)
t: Unresponsive socket (will attempt reconnect).
t-Entry: setReturnCode
t-Exit: setReturnCode
t: Unable to send HTTP message.
t-Entry: reconnect
t-Entry: idiscImpl
t: Closing socket: 0
t-Exit: idiscImpl
t-Entry: iconnImpl
t-Entry: initTranslationTables
t-Exit: initTranslationTables

这是成功执行的详细日志:

t: HWTH_OPT_VERBOSE has been set to HWTH_VERBOSE_ON
t-Entry: iconnImpl
t-Entry: initTranslationTables
t-Exit: initTranslationTables
t: Connecting to XX.XXX.XX.XXX via port 8080
t: Attempting to connect to IP address: XX.XXX.XX.XXX
t-Entry: setSocketoptions
t-Exit: setSocketoptions
t: Connection established using socket: 0
t-Entry: checkForTTLS
t: ATTLS detection OK: s=0 pol=OFF
t: Socket maps to TTLSRule: (none)
t: ATTLS is *not* in effect
t: Connected to origin server with socket: 0
t-Exit: iconnImpl
t: HWTH_OPT_VERBOSE has been set to HWTH_VERBOSE_ON
t-Entry: sendrqst
t-Entry: sendrqstImpl
t-Entry: appendRequestLine
t: No proxy is being used for the request
ÝHWTHCKST¨ (no request cookies specified)
ÝHWTHCKST¨ getCookieHeader() - No applicable cookies found
t: No applicable cookies found
t: * * * * * HTTP REQUEST HEADERS * * * * *
t-Entry: cleanseReqHdrs
t: GET /rest/validate/results.json
t: * * * * * END HTTP REQUEST HEADERS * * * * *
t-Entry: translate
t-Exit: translate
t-Entry: sendInlineRequest
t-Entry: doSend
t-Entry: ignoreSignal
t: Now ignoring signal: SIGPIPE
t-Exit: ignoreSignal
t-Entry: restoreSignal
t: restoring signal: SIGPIPE
t-Exit: restoreSignal
t: send()
t:  bytes sent: 384
t:  total bytes: 384
t:  bytes remaining: 384
t: send successful.
t-Exit: doSend
t-Exit: sendrqstImpl
t-Entry: recvresp
t-Entry: recvrespImpl
t-Entry: initReceiveVars
t: Response buffer is empty.
t-Entry: getNextResponseData
t: Now processing 1547 additional response bytes.
t-Entry: processResponseData
t-Entry: translate
t-Exit: translate
t-Entry: parseResponseHeaders
t: HTTP status = 200
t: HTTP version = HTTP/1.1
t: HTTP reason = OK
t: Header: Date =
t-Entry: headerCallback
t-Exit: headerCallback
t: Header: Content-Type = application/json
t-Entry: headerCallback
t-Exit: headerCallback

解决方法

根据 documentation,EDC5157I 的程序员响应(在失败调用的详细日志中)是“将此问题报告给您的系统程序员。”这就是 IBM 的说法:“发生了不好的事情,您可能无法修复它,但您的系统程序至少可以收集诊断信息以尝试解决问题。”

所以我建议从负责产品的人开始,向他们提供您在此处发布的信息以及指向文档的指针。

,

我在开发工具包。感谢您从详细跟踪中包含一些上下文行。这些跟踪输出可能会变大,而且您已经拨入了正确的部分。

底线:这看起来像是“信号处理程序的冲突”。当您的 HWTHRQST 进程使用由某个其他进程或 MVS 任务打开的连接句柄时,可能会发生这种情况。 MVS 任务之间不能共享打开的连接句柄,每个 MVS 任务一次只能获得一个打开(连接)句柄。

公平地说,向您报告的问题工具包有点误导,因为它“掩盖”了详细跟踪中暴露的这个问题......

t: Unable to query current action for signal: 13 error: EDC5157I. An internal error has occurred.
t: Unable to ignore signal(s)
t: Unresponsive socket (will attempt reconnect).

这个潜在的问题是当前任务无法更改 POSIX 信号掩码。这意味着某些事情真的很糟糕。有人从左外野打电话给我们。在一个任务的连接句柄无意中与同一地址空间中的另一个任务共享的情况之前,这种情况已经出现过。同样,不支持在任务之间有意共享开放连接。

我可能要补充的一件事...看起来(从您的详细跟踪中)您的 z/OS 系统落后于工具包 APAR 和修复程序。最近的修复在每行详细跟踪中都包含一个带时间戳的“跟踪前缀”,它们在这种情况下非常有用。

但是,让我们了解一下,除非您系统程序员,否则应用工具包维护绝对属于“请您友好的系统程序员”类别(“不是您可以自己解决的问题”- - 正如之前的海报所说的那样雄辩;-)

这个级别的 Toolkit 修复需要带有 CLPA(Clear Link Pack Area)的 IPL,它实际上定义了“破坏性操作”。)至于这个问题是否上升到 APAR 和相关修复的级别,这超出了我的工资等级. *8-)

我当然希望这会有所帮助,甚至可能会提示一个刺激的线程。多年来,我一直是堆栈溢出的潜伏者/粉丝 - 或许可以为某人提供答案,进行更改,这感觉很好。

-布莱尔