在同一个盒子上的应用程序之间实现进程间通信的最佳方法是什么 - 都是用c#编写的?
管理器应用程序将发送命令,例如:停止,启动到其他应用程序。它还将监视应用程序并可能要求数据。
所有应用程序都将在Windows 7操作系统上运行的同一台计算机上运行。
IPC频道是一个不错的选择吗?被命名为Pipes更好的选择?或者套接字是更好的选择吗?
正在管理的应用程序都具有相同的名称。当它们启动时,它们会加载一个dll来确定运行哪些算法。
由于
答案 0 :(得分:7)
将其缩小,将WCF与命名管道一起使用。
这是一个关于这个问题的链接:What is the best choice for .NET inter-process communication?
答案 1 :(得分:0)
一种执行此操作的方法,特别是如果您想在从同一应用程序剥离的不同进程之间进行通信时,请使用MemoryMappedFile
。这是最简单的示例-将其放入控制台应用程序。启动它的2个实例,然后快速依次在其中一个中键入w+enter
,在另一个中键入r+enter
。看。注意–我取消了读写时序的同步,因此您可以看到有时数据有时会发生变化,而其他时间却发生了变化-
class Program
{
private static MemoryMappedFile _file = MemoryMappedFile.CreateOrOpen("XXX_YYY", 1, MemoryMappedFileAccess.ReadWrite);
private static MemoryMappedViewAccessor _view = _file.CreateViewAccessor();
static void Main(string[] args)
{
askforinput:
Console.WriteLine("R for read, W for write");
string input = Console.ReadLine();
if (string.Equals(input, "r", StringComparison.InvariantCultureIgnoreCase))
StartReading();
else if (string.Equals(input, "w", StringComparison.InvariantCultureIgnoreCase))
StartWriting();
else
goto askforinput;
_view.Dispose();
_file.Dispose();
}
private static void StartReading()
{
bool currVal = false;
for (int i = 0; i < 100; i++)
{
currVal = currVal != true;
Console.WriteLine(_view.ReadBoolean(0));
Thread.Sleep(221);
}
}
private static void StartWriting()
{
bool currVal = false;
for (int i = 0; i < 100; i++)
{
currVal = currVal != true;
_view.Write(0, currVal);
Console.WriteLine("Writen: " + currVal.ToString());
Thread.Sleep(500);
}
}
}
同样,您可以使用“内存映射文件”构建非常复杂且强大的通信层。这只是简单的例子。