c# - 如何在不使用 SendMessage 的情况下将 "Message"发送到 .Net 中的另一个进程?

标签 c# .net win32-process akka.net

我有多个应用程序在一台机器上运行。一个正在执行工作并将日志写入磁盘以了解它所做的事情(我将称之为 WorkerApp),另一个是总结有关 WorkerApp 状态的支持信息以及更多详细信息(我将称之为仪表板)。

我想从 Dashboard 指示 WorkerApp 采取行动(例如,“Ping 远程服务”),并且我希望 WorkerApp 在收到“pong”响应时向 Dashboard 发送响应。

我看过使用 SendMessage 的示例,但这似乎很陈旧(2016 年现在没有更多标准用于进程间通信吗?)。

我对 Akka.Net 的经验很少但是Remoting它的功能似乎是一个很好的方法,尽管设置它对于我想做的事情来说似乎有点矫枉过正。

目前在 .Net 中两个进程之间进行通信的最简单方法是什么?是否有一些在本地机器上工作的例子?

最佳答案

我为此整理了一个 Akka.Net 示例。这是它的样子。

仪表板(发送消息)

using System;
using Akka.Actor;
using Akka.Configuration;

namespace DashBoard
{
    class Program
    {
        static void Main(string[] args)
        {
            var config = ConfigurationFactory.ParseString(@"
akka {  
    actor {
        provider = ""Akka.Remote.RemoteActorRefProvider, Akka.Remote""
    }
    remote {
        helios.tcp {
            transport-class = ""Akka.Remote.Transport.Helios.HeliosTcpTransport, Akka.Remote""
            applied-adapters = []
            transport-protocol = tcp
            port = 0
            hostname = localhost
        }
    }
}
");

            using (var system = ActorSystem.Create("Dashboard", config))
            {
                var server = system.ActorSelection("akka.tcp://WorkerApp@localhost:8081/user/WorkerAppActor");
                while (true)
                {
                    var input = Console.ReadLine();
                    server.Tell(input);
                }
            }
        }
    }
}

WorkerApp(接收消息)

using System;
using Akka.Actor;
using Akka.Configuration;

namespace WorkerApp
{
    class Program
    {
        static void Main(string[] args)
        {
            var config = ConfigurationFactory.ParseString(@"
akka {  
    actor {
        provider = ""Akka.Remote.RemoteActorRefProvider, Akka.Remote""
    }
    remote {
        helios.tcp {
            transport-class = ""Akka.Remote.Transport.Helios.HeliosTcpTransport, Akka.Remote""
            applied-adapters = []
            transport-protocol = tcp
            port = 8081
            hostname = localhost
        }
    }
}
");

            using (var system = ActorSystem.Create("WorkerApp", config))
            {
                system.ActorOf<WorkerAppActor>("WorkerAppActor");

                Console.ReadLine();
            }
        }
    }

    class WorkerAppActor : TypedActor, IHandle<string>
    {
        public void Handle(string message)
        {
            Console.WriteLine($"{DateTime.Now}: {message}");
        }
    }
}

关于c# - 如何在不使用 SendMessage 的情况下将 "Message"发送到 .Net 中的另一个进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38014015/

相关文章:

c++ - 在 win32、c++ 中的 2 个进程之间共享相同的标准输出

c# - 找出哪个模块注册了类型

.net - 如何在 Windows CE 中使用 VB.Net 访问条码扫描仪

c# - 使用 Microsoft Fakes 进行模拟

.net - 当 T 直到运行时才知道时,将 IEnumerable 转换为 IEnumerable<T>

c++ - FindFirstFile() 可以用来移动文件吗

c# - 使用 C# 获取应用程序打开的所有 TCP 连接

c# - SSL证书和私钥(RSA)

c# - 按字符拆分字符串 C#

c - DeleteFile() 或 unlink() 调用成功但不删除文件