从大型机批处理程序调用 Web 服务

Posted

技术标签:

【中文标题】从大型机批处理程序调用 Web 服务【英文标题】:Calling web services from Mainframe batch programs 【发布时间】:2011-02-18 09:34:13 【问题描述】:

我们目前正在考虑从 Main Frame 进行部分迁移。

一些用 Mainframe Cobol 编写的功能是从 Mainframe Batch 程序中调用的。

我们希望将这些 cobol 程序移出大型机。

例如,如果我们将 cobol 程序中的功能移至 Java 或 .Net Web 服务。是否可以从大型机批处理程序中调用此 Web 服务?

【问题讨论】:

【参考方案1】:

首先,我不确定是否有办法直接从 Cobol 调用 Web 服务,但我们在尝试使用 RPG 和 CL 从 iSeries(AS400) 调用 Web 服务时遇到了类似的问题。

最后,我们用java编写了一个简单的Socket程序,运行在服务器上,我们称之为WebServiceBridge,桥接程序只是简单地从socket程序中取出数据,然后用Java构造一个webservice调用。我们只是简单地通过套接字返回结果。

如果 Cobol 在 Web 服务方面遇到困难,那么这可能是一个简单的解决方案。但请注意,您的网桥需要像设计 Web 服务一样受到监控、具有弹性并且始终可用。

【讨论】:

Cobol 批处理有许多选项可以访问 Web 服务。 OP 可以使用内置的 xml 解析器和生成器连接自己的肥皂;他们可以使用 EXEI 接口路由到 TS/SOAP;可以利用 RD/z 支持来调用 Web 服务;有许多第三方产品允许此类访问。 IBM 的 MQ Integrator 桥接产品也可以做到这一点。对不起,我忘了在之前的评论中提到它。【参考方案2】:

在以前的生活中,我编写了汇编程序例程,使用此处描述的技术从 PL/1 调用 TCP/IP 堆栈,这些技术也适用于 COBOL:

http://publib.boulder.ibm.com/infocenter/zos/v1r9/index.jsp?topic=/com.ibm.zos.r9.halz002/tcpipapis.htm

很遗憾,我无法与您分享它们,但它们并不太复杂。 请记住,Web 服务将对 ASCII 或 UTF-8 感兴趣,并且您的 COBOL 可能正在运行 EBCDIC,因此必须有人进行翻译。

一旦您可以与套接字通信,您就必须使用各种标头来制定您的 Web 请求,然后对结果进行解码......这不是微不足道的,但它是可能的。 '希望有帮助。

【讨论】:

【参考方案3】:

[这里假定“Web 服务”是指 HTTP(S) 和 SOAP]

CICS TS 3.1 及更高版本的 API 包括应用程序调用 Web 服务的能力。 CICS 应用程序通常是交互式的,但可以通过外部 CICS 接口从现有的批处理应用程序调用。此接口使用 CICS 逗号,因此传递的数据必须适合 32K 缓冲区。

进入 CICS 的另一个途径是 MQSeries(现在更名为 WebSphereMQ)。在这种情况下,您的批处理应用程序会将数据(在这种情况下没有 32K 限制)放入定义为已触发的队列中,触发器监视器将自动启动 CICS 应用程序。 CICS 应用程序将通过响应队列将响应返回给 Web 服务。

如果您执行其中任何一项操作,我预计批处理作业的时钟时间会增加。与在本地执行代码相比,通过网络执行某些代码所需的时间更长。

【讨论】:

+1 谢谢,但在这种情况下,我们只有批处理,没有 CICS,但我们仍然可以通过 MQ。【参考方案4】:

我已经做到了。使用 c 语言程序进行 http 调用和使用 cobol copybook 的 cobol 接口程序,因此它看起来像任何其他程序调用一样的应用程序。所有的http头都被c程序转换为ascii并返回,而payload被转换为主机。

【讨论】:

以上是关于从大型机批处理程序调用 Web 服务的主要内容,如果未能解决你的问题,请参考以下文章

尝试执行 Web 服务时,“Abend in target program”作为一般异常

有没有办法从 IBM 大型机批处理程序中的第 10 条记录开始读取 ESDS 文件?

大型 WCF Web 服务请求因 (400) HTTP 错误请求而失败

充满事件处理程序的巨大文件!如何在 AJAX Web 应用程序中组织大型 jQuery 文件?

大型Web应用运行时 PHP负载均衡指南

大型复杂对象作为 Web 服务结果 [关闭]