两个独立的C#.Net应用程序在同一台计算机上相互通信的最简单方法是什么

我希望我的两个应用程序能够相互发送字符串,并取决于字符串“ 做某事 ”。

这是一个预先概念validation模型类型的东西,所以不需要安全预防措施,也不需要你想要的低效率。

那么我如何以最少的工作来做到这一点。

(你亲爱的家伙,所以用户可以在问题上努力工作)

他们到底在多大程度上确实需要不同的应用程序?

您可以在不同的线程上从第三个项目启动两个单独的项目吗?

static void Main() { new Thread(Project1.Program.Main).Start(); new Thread(Project2.Program.Main).Start(); } 

此时,您可以使用静态变量(在第四个项目中,由前两个项目引用)在两个项目之间建立共享通信通道。 例如,您可以拥有两个生产者/消费者队列 (在页面的下半部分),每个方向一个。 (你想让队列只使用字符串,或者制作一个通用的队列然后使用ProducerConsumer 。如果你可以使用.NET 4.0 beta,你可以使用BlockingCollection 。)

这将是非常hacky – 即使没有甚至不同的AppDomain的隔离,你可以看到从两个“应用程序”访问的静态变量方面的一些有趣的效果,但这实际上是你想要实现的。

你不应该在生产代码附近的任何地方采用这种实现方法 – 但对于你所描述的情况,听起来“简单实现”是最重要的一点。

如果项目层次结构没有意义,这里是一个图形表示

  Launcher / \ / \ App 1 App 2 \ / \ / \ / Shared stuff 

(为了使它更简单,你实际上可以只使用一个项目,并使其主方法使用同一项目中的方法启动两个不同的线程。无论如何,这两个应用程序的想法都是烟雾和镜子。另一方面。可以通过分离项目来更容易地思考不同的应用程序。)

有几种机制 – 可能最容易使用的是命名管道。 我没有使用它,但我知道Windows Communication Foundation(WCF)也很容易使用。

有关WCF的CodePoject上有很多文章 🙂

使用WCF的一个优点是可以轻松地将您的流程移动到不同的系统。 (这应该适用于您的场景)。

一种方法是使用.NET Remoting IpcChannel类在同一台机器上的不同进程之间进行通信。

WCF是一种很好的方式,即使你开始深入研究它,它也会变得复杂。

您定义了一个接受字符串的简单契约,然后在每个应用程序中实现契约,在字符串到达​​时执行您想要的任何操作。 在应用程序中,您可以自行托管服务,这意味着应用程序本身托管服务 – 因此您不需要IIS。 将它们托管在已知端口上,在每个解决方案中添加Web服务引用,然后离开。

应用程序有很多非常简单的方式以非常简单的方式进行通信。 我认为最简单的一些将是以下内容

  • 命名管道
  • 本地套接字
  • 共享内存

我能想到的最简单的方法是创建一个其他进程检查的文件。

更“先进”和“明智”的方法是使用套接字和localhost。

如果我想实际实现它,我会尝试学习正确的IPC。

我会选择sockets。