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

时间:2009-06-27 20:49:14

标签: c# .net

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

这是针对概念验证模型类型的事情,因此不需要安全预防措施,也不需要您效率低下。

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

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

7 个答案:

答案 0 :(得分:6)

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

有很多关于WCF的articles on CodePoject :)

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

他们在多大程度上真的,真的需要成为不同的应用程序?

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

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

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

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

你不应该在生产代码附近的任何处理这个实现想法 - 但是对于你所描述的情况,听起来“简单实现”是最重要的一点。

以防项目层次结构没有意义,这是一个图形表示

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

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

答案 3 :(得分:2)

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

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

答案 4 :(得分:1)

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

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

答案 5 :(得分:1)

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

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

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

答案 6 :(得分:-1)

我会选择套接字。