C# 我可以使用.NET远程处理在控制台应用程序和;由同一控制台应用程序创建的进程?(两者位于同一服务器中)

C# 我可以使用.NET远程处理在控制台应用程序和;由同一控制台应用程序创建的进程?(两者位于同一服务器中),c#,wcf,command-line-arguments,remoting,inter-process-communicat,C#,Wcf,Command Line Arguments,Remoting,Inter Process Communicat,我开发了一些后台控制台应用程序,应该在服务器上运行 它们被称为服务器进程和服务器代理。服务器进程总是一次一次地创建服务器代理的实例(作为一个进程),下面是调用服务器代理的代码 private static void CreateUpdatedBookingAgent(UpdatedBooking oUpdatedBooking) { try { //Run the Console App string command = @"C:\ServerAg

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

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

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);
    }
}
我的问题是:

  • 我可以使用.NET远程处理吗?我的意思是,这是一种很好的方法吗

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


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


  • 虽然WCF确实是最好的方式,但我最近遇到了一个与您面临的问题类似的问题。我的场景是需要从.NET 2 Winforms应用程序调用.NET 4.5控制台应用程序

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


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

    这似乎不是一件小事,但在进程之间使用共享内存应该会提供最佳性能


    远程处理或WCF是实现这一点的好方法。您可能应该选择一些“IPC”传输,因为它们仅限于本地机器通信。这是一个很好的安全保证

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


    使父节点将通信端点传递给客户端。存在一个安全问题,即本地计算机上的任何东西都可能连接到该端点。处理这个问题的一个简单策略是在命令行上将安全生成的Guid传递给子级,并使子级使用该Guid进行身份验证。或者,将端点URL基于该Guid。

    对于“好”的解决方案,您的衡量标准是什么?远程处理是一种遗留技术,保留它是为了与现有应用程序向后兼容,不建议用于新的开发。现在应该使用WCF或ASP.NET Web API开发分布式应用程序。请参阅顶部的注释以获取证据。为什么不直接使用WCF?我同意WCF和网络管道是一种方式。服务器和客户端都必须是控制台应用程序。据我所知,在这种情况下,我无法从WCF中获益。我说的对吗?我注意到OP没有表达对高性能的担忧。在这种情况下,可能无法保证实现共享内存的额外困难。