进程间通信:MFC 服务器、.NET C# 客户端

Posted

技术标签:

【中文标题】进程间通信:MFC 服务器、.NET C# 客户端【英文标题】:Inter Process communication: MFC server, .NET C# client 【发布时间】:2010-04-26 19:13:56 【问题描述】:

我有两个使用命名管道交换字符串命令的 MFC C++ 桌面应用程序。一切都很好,很可靠。

现在,我必须使用 SilverLight 控件添加用 .NET C# 编写的客户端。我知道如何在 C# 中使用命名管道。但我第一次尝试混合这些失败:无法将客户端连接到正在运行的服务器。

我有什么遗漏并且“混合坚果”模式必须有效吗?还是“语言障碍”?

【问题讨论】:

【参考方案1】:

假设您尝试使用 WCF 进行通信,据我所知,NetNamedPipeBinding 不适用于 Silverlight,并且如果您尝试执行 P/Invoke,由于安全原因,它将被阻止在浏览器中运行的 Silverlight 应用程序浏览器的限制。

您确实可以跨 Silverlight 插件进行消息传递。 Paul Stubbs 有一个 blog post 展示了它在 Silverlight 3 中的工作原理。

只要您的 Silverlight 应用程序在浏览器中运行并且您必须与 MFC 服务器通信,您就必须实现命名管道之外的其他协议。如果 Silverlight 应用程序在浏览器之外运行,我认为您也不能使用 P/Invoke。这是Silverlight的限制。

【讨论】:

你如何看待套接字? 如何在 mfc 服务器和客户端之间创建一个服务器代理,它使用与客户端的 wcf 绑定和与 mfc 服务器的命名管道?【参考方案2】:

如果你愿意与COM Interop打交道,或许有办法。

它将让您与具有 COM 互操作性的本地应用程序进行通信。然后,您可以使用任何可用的方式将消息从 Silverlight 传送到您想要的应用程序,因为 COM 对象没有与 Silverlight 相同的限制。这需要 Silverlight 4,并且还需要在客户端设置 COM 互操作目标。

【讨论】:

但请注意,silverlight 应用程序必须以提升的权限运行才能正常工作。 (浏览器外) Com Interop 听起来很有趣。但是我此时正在使用 Silverligth 3,并且我正处于项目的中间......嗯,需要重新组合,我认为 :-) 你认为套接字是更好的选择吗? MFC -> Silverlight 哎哟。在这种情况下,我能想到的最好的方法是使用托管 Silverlight 的服务器作为中介(即让 MFC 通过 http post 向服务器发送消息,然后让 Silverlight 应用程序每隔一段时间轮询服务器)或设置localhost 以某种方式作为服务器。不过,与您在 MFC 应用程序之间进行的操作相比,我提出的任何想法都不是微不足道的。但是,使用托管 Silverlight 的服务器作为中介将是我研究的下一个想法。 谢谢哥们,这周我很开心 :-)【参考方案3】:

对于查看此旧线程的任何人,一种方法是使用 http 轮询创建双工 wcf 服务 - silverlight 客户端然后可以与 wcf 服务通信,该服务可以将消息传递到 MFC 应用程序。

更多阅读:

http://msdn.microsoft.com/en-us/library/cc645027(v=vs.95).aspx

【讨论】:

以上是关于进程间通信:MFC 服务器、.NET C# 客户端的主要内容,如果未能解决你的问题,请参考以下文章

C# .net 3.5 进程间通信验证子进程是不是启动正常

何时应该使用 Pipes 或 gRPC 进行进程间通信(在 C# .NET Core 中)?

MFC 和 WPF 之间的进程间通信

进程间通信包创建

MFC sendmessage实现进程间通信

进程间通信/广播