2011-08-05 51 views
0

最近有人问我之间的谈话在采访如下:使用序列2个处理/在C#应用程序(进程间通信)

,有一项经常收到消息每5分钟一个过程/应用程序A(假设)

的要求是,存在需要该消息被从A.

但是过程/应用转印应该确保该消息已实际接收过程/应用B.

一个过程/应用B

访问者想知道如何在c#中实现。我们可以在这里使用序列化吗?

从我的理解中可以做到的最好方法是使用Message Queue或PIPE机制。

回答

0

任何涉及(在单个过程或,一般地,即使应用程序域之间)具有使用某些种序列化过程之间发送消息,作为最终的数据需要被映射下来的东西,可以遍历进程空间,根据定义,“消息”是序列化的数据。这个序列化可以是显式的也可以是隐式的(自动的,也许通过代理/存根层 - 尽管我不喜欢)。

在现实中,进程/应用程序A 无法“确保”,它已交付,因为它不能强制执行的第二进程正在运行。但是,它可能会有某种回调确认消息。事务性消息队列不是不合理,但只保证它排队 - 它不能确保它被处理(永远)。就我个人而言,我首先会看到一个套接字是否足够。

0

有IPC的一些可能的方式在.NET:

  1. 内存映射在.NET文件4
  2. .NET远程
  3. 使用插座和环回(127.0.0.1)

最简单的是在.NET 4.0中使用内存映射文件。
您可以使用序列化或任何消息表示格式,例如XML用于消息传递。
这是关于IPC,但如果您想确保从(进程B或其他进程)发送请求的位置,则必须使用签名机制。

0

序列化(简称)是创建消息的过程。但是,如果您有兴趣确保邮件到达目的地(并且以一致的状态执行),则应该询问有关通信协议的问题 - 这是描述邮件实际发送方式的事情。例如UDP协议不保证传送和TCP。

还值得一提的是,保证交付意味着保证系统B完好地接收消息,或系统A将被告知交付失败(例如系统B关闭时)。也就是说,一些消息队列保证了传递 - 当队列中的按摩没有到达目的地时,消息将被标记为失败(例如,将其放入失败消息队列中)。

相关问题