如何将 C# 客户端 RPC 写入远程本机 C++ 服务器?

Posted

技术标签:

【中文标题】如何将 C# 客户端 RPC 写入远程本机 C++ 服务器?【英文标题】:How to write a C# client RPC to a remote native C++ server? 【发布时间】:2012-03-03 09:41:47 【问题描述】:

我必须实现一个 C# 客户端,访问本地 C++ server.exe,它具有 RPC 接口,在远程计算机上运行。

推荐的方法是什么?

我的想法是:

    在客户端写一个C++ dll,使用RPC与服务器通信,通过COM暴露其接口,然后C#访问COM接口。(我一路经历。) 在客户端写一个C++ dll,使用RPC与服务器通信,用C++ CLR封装接口,然后C#直接访问它们。(不熟悉C++ CLR封装)

有没有更直接的方法来做到这一点?我搜索了一些其他术语,例如 Remoting,它是 WCF 的后继者,然后是 DCOM,它们是我可以使用的吗?

我的标准是越简单越好,因为我是一个懒惰的程序员。如果可能的话,新技术是首选,我的意思是,如果 WCF 是 Remoting 的新替代品,我会使用 WCF 而不是 Remoting。

【问题讨论】:

WCF 替代 Remoting 已经六年了。 【参考方案1】:

可能最简单的选择是在客户端编写一个 C++ DLL,它使用 RPC 与服务器通信,并通过 pinvoke 在 DLL 中调用 C# 函数。这里的主要任务是在托管和本机之间设置函数参数的编组。该任务的复杂性取决于界面的复杂程度。

【讨论】:

感谢您的回答。我以为 C# 可能有某种更直接的方式来访问 C++ RPC 服务器,但现在我知道没有。

以上是关于如何将 C# 客户端 RPC 写入远程本机 C++ 服务器?的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ系列教程之六:远程过程调用(RPC)

如何附加调试器以从托管(C#)包装器进入本机(C++)代码?

RPC的发展历史(本质就是双方定义好协议,传递参数后远程调用)

RabbitMQ学习 (远程过程调用(RPC))

如何在托管代码(C#)中从本机代码(C++)获取字符串数组

10个类手写实现 RPC 通信框架原理