是否可以使用 .NET 远程处理在控制台应用与由同一控制台应用创建的进程之间进行通信?(两者位于同一服务器中)

本文关键字:控制台 应用 通信 进程 之间 服务器 于同一 程处理 NET 可以使 处理 | 更新日期: 2023-09-27 17:56:06

我开发了一些后端控制台应用程序,这些应用程序应该在服务器上运行。

它们称为服务器进程和服务器代理。服务器进程始终不时地创建服务器代理的实例(作为一个进程),下面是调用服务器代理的代码

private static void CreateUpdatedBookingAgent(UpdatedBooking oUpdatedBooking)
{
    try
    {
        //Run the Console App
        string command = @"C:'ServerAgentConsole.exe";
        string args = ("UpdatedBooking " + oUpdatedBooking.MeetingKey + " " + oUpdatedBooking.ServiceAccountEmail.Trim() + " " + oUpdatedBooking.ServiceAccountPassword.Trim() 
            + " " + oUpdatedBooking.ServiceAccountEmail.Trim()+ " " + oUpdatedBooking.MailBoxOwnerEmail.Trim() + " " + oUpdatedBooking.Method.Trim()
            + " " + oUpdatedBooking.ExchangeURL + " " + oUpdatedBooking.ApiURL + " " +  oUpdatedBooking.Subject + " " + oUpdatedBooking.Location 
            + " " + oUpdatedBooking.StartTime + " " + oUpdatedBooking.EndTime).Trim();
        Process process = new Process();
        process.StartInfo.FileName = command;
        process.StartInfo.Arguments = args;
        process.EnableRaisingEvents = true;
        process.Exited += new EventHandler(processExitedUpdatedBooking);
        process.Start();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

我的问题是:

  1. 我可以为此使用 .NET 远程处理吗,我的意思是这是执行此操作的好方法吗?

  2. 如果没有,是否有更好的方法将数据(参数)传递给服务器代理?

  3. 服务器和客户端都必须是控制台应用程序。据我所知,在这种情况下,我无法从WCF中受益。我说的对吗?

是否可以使用 .NET 远程处理在控制台应用与由同一控制台应用创建的进程之间进行通信?(两者位于同一服务器中)

远程

处理或 WCF 是执行此操作的好方法。您可能应该选择一些"IPC"传输,因为它们仅限于本地计算机通信。这是一个很好的安全保证。

请注意,远程处理被认为是过时的。.NET Framework 源代码在#if FEATURE_REMOTING后面具有远程处理功能,因此他们可以轻松地从框架中删除该功能。

使父级将通信终结点传递给客户端。从某种意义上说,存在安全问题,即本地计算机上的任何内容都可能连接到该终结点。处理此问题的一种简单策略是在命令行上将安全生成的 Guid 传递给子项,并使子项使用它进行身份验证。或者,终结点 URL 基于该 Guid。

虽然 WCF 是最好的方法,但我最近遇到了与您面临的类似的问题。我的方案是需要从 .NET 2 Winforms 应用调用 .NET 4.5 控制台应用。

传递的数据很简单,我认为只需将数据序列化到磁盘并将序列化数据的文件名传递给 .NET 4 应用更容易。 .NET 4 应用从调用时收到的文件名中检索数据,并删除该文件。

我不是说它很漂亮,但它是有效的,可能值得考虑。

这似乎不是一件容易的事,但是在进程之间使用共享内存应该可以获得最佳性能。

如何在 .NET 中实现共享内存?

2 个进程(应用程序)之间的共享内存