从大型机批处理程序调用 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 错误请求而失败