两个 c# 应用程序之间的通信

Communication between two c# applications

我有一个问题,在 C# 方面没有太多经验,所以我做了很多研究,但我被卡住了。

我要做两个C#应用,第一个应用是windows表格,第二个在后台运行,这样第一个应用就是一个(POS)销售点,需要与之通信信息(产品,客户等...)和发送数据的应用程序背景,所以不想使用网络服务来解决超时等问题,所以任何人都可以帮我一些想法来执行这个任务?

值得一提的是,后台应用程序只有一个,而与之通信的 POS 应用程序会很多(n 个应用程序)。

通常情况下,您将使用消息队列来处理类似的事情。它们是确保关注点完全分离的一个组件,减少了跨应用程序耦合,旨在接收某些发布者的消息(从而免除发布者的任何进一步责任),并将消息推送给某些订阅者。

RabbitMQ 是一个流行的框架:https://www.rabbitmq.com/

(请注意,RabbitMQ(和其他现成的框架)有时会让新的应用程序程序员望而生畏,因为他们处理大量用例。但是,从一个应用程序写入队列并从另一个应用程序中的队列真的是这里的关键......随意实现一个你自己的小实用程序作为学习经验,但如果你习惯使用这样的框架,我确实推荐一个预先存在的框架)

进程间通信的方式有很多种。由于问题很笼统,我会指出一些更常见的方法。

  • 后台进程可以是 windows 更新数据库和 POS 系统查询数据库以检索所需内容的服务。即使后台进程从同一个数据库中读取,您也可以有一个单独的 table,它已经准备好 POS 片的“完成”信息。现在你也可以使用文件而不是数据库来存储这个完成的结果,但大多数人更喜欢数据库。
  • 您可以使用WCF通道在POS片与后台进程之间建立通信。
  • 您可以将后台进程转换为 Web 服务,让您的 POS 使用 XML 进行通信。我认为任何超时问题都不是问题。您必须更好地解释是什么超时问题导致您不使用此选项。
  • 您可以将整个作品转换为网站,然后 POS 将只是一个浏览器
  • 您可以使用像 Tibco 或 MQ 这样的总线来传递数据。
  • 或者您可以采用老式的 TCP 套接字方式。

最首选的方式通常是网络服务或网站方式,具体取决于您的限制。

一种方法是使用命名管道进行不同程序之间的此类通信。

How to: Use Named Pipes for Network Interprocess Communication

如果您不想使用网络服务(基于 soap 协议), 您可以尝试使用网络 api。通过这种方式,您可以使用 json 构建基于 rest 的接口(json 计算机之间的流传输比 xml 流传输更快)。

我认为以下link可能对您有用:

http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/using-web-api-with-aspnet-web-forms