【问题标题】:Data communication between COBOL and C#COBOL 和 C# 之间的数据通信
【发布时间】:2020-04-17 08:44:40
【问题描述】:

我想在 COBOLC# 应用程序之间建立一个通信协议。我没有找到连接这两个应用程序的正确方法。唯一可行的方法是通过 COBOL 将数据写入文件并通过 C# 应用程序读取,反之亦然。

我可以使用套接字技术来创建这样的通信,因为文件方法的性能很差吗?或者还有其他在这两种语言之间进行数据通信的方法吗?

【问题讨论】:

  • 没有什么能阻止你使用套接字,只要你有一个 COBOL 套接字库。
  • 您在什么系统上运行您的 COBOL 程序?你用的是哪个编译器?
  • 可以使用标准输入和标准输出

标签: c# cobol communication-protocol


【解决方案1】:

我可以使用套接字技术来创建这样的通信 [...]?

当然!您只需要使一个套接字服务器和另一个客户端+创建+实现协议(如果它只是一个客户端+服务器并且您不需要安全通信,这很容易)。您的 COBOL 环境中可能已经有一个套接字选项,或者使用免费的CBL_GC_SOCKET 等外部库(适用于许多 COBOL 实现,只要它们可以调用 C/C++ 二进制文件)。

或者有没有其他方法可以在这两者之间进行数据通信 语言?

大量(特别是如果它们在同一台机器上运行)。

  • 根据所使用的 COBOL 环境,您可能有一个直接的 .NET 程序集选项和CALL/invoke,或者可以编写一个层来执行此操作,在 C# 中运行转换为本机代码的 COBOL 代码。
  • 直接输入/输出通常是一种解决方案(取决于需求和环境,并非所有设备都有双向管道选项)。
  • 与消息队列服务器通信(可能性能不高)
  • 如果 COBOL 环境支持:创建一个 REST 端点并将其用于通信;或者从 COBOL 到用 C# 实现的 REST 服务的另一种方式(来自 COBOL 的 REST 可能是上述方式中“最便携”的方式,但也是性能最差的方式)
  • ...

结论:没有什么能阻碍COBOL与任何合理的“其他编程语言”“交流”,你主要还是要看你是COBOL,“其他编程语言”提供什么,你的目标是什么。

【讨论】:

  • 您能解释一下为什么消息队列服务器不能工作吗?例如,如果 telegraf 守护程序在本地运行,并转发到 ZeroMQ 或 MQTT 代理,那为什么会比原始套接字更糟糕呢? (忘记额外依赖的开销)
  • 一个消息服务器完全可以工作(在双方都努力与之通信之后)。额外的“中间人”(在这种情况下也可能不广播消息而仅将其传输到特定客户端)总是开销,因此取决于您发送消息的频率,您会看到开销。
  • ZeroMQ / RabbitMQ / ActiveMQ、MQTT、Kafka 等等,都有不同级别的广播能力。添加消息队列/分布式日志通道和异步服务工作者是现代 Web 的工作方式,因此在该领域,尚未投资此类技术的公司将无法创新,IMO。这就是 Netflix、Uber、Tesla、Spotify 等都能够扩展其工作负载的方式
猜你喜欢
  • 2017-08-13
  • 2013-10-18
  • 2011-08-08
  • 2016-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多