适用于 VB6 和 .net 应用程序的最佳 IPC

Posted

技术标签:

【中文标题】适用于 VB6 和 .net 应用程序的最佳 IPC【英文标题】:Best IPC for VB6 and .net application 【发布时间】:2009-03-19 03:47:54 【问题描述】:

在我们的应用程序(文档管理系统)中,我们应该收到屏幕更改通知(或通知其他程序屏幕更改),以便让两个应用程序查看相同的数据,一个是订单履行应用程序,另一个是原始传真的文档查看器。履行应用程序使用 vb6 编写,文档管理器使用 .net 3.5 (c#)。它在终端服务器上运行,因此它也必须是会话感知的。可以先打开文档查看器或履行应用程序,并且可以在没有另一个的情况下使用两者。最好的 IPC 方法是什么?

【问题讨论】:

【参考方案1】:

如果您希望能够在 Vista 或 Windows 7 上运行,最好的 IPC 形式将是 TCP(这很容易在 VB6 中使用 Winsock 控件完成)。

这样做的好处是两个应用程序可以通信,即使它们不是以同一用户身份运行,它们也可以通信(在 Vista+ 下使用 SendMessage 或命名管道无法做到这一点)。您唯一需要记住的就是在防火墙中设置一条规则,这样它就不会被阻止。这可以在您的安装程序中完成:

netsh.exe firewall set allowedprogram "PROGRAM PATH" "PROGRAM NAME" enable

【讨论】:

这样做的问题也是它的好处。我在终端服务器上使用每个应用程序的许多实例,就像在单个用户的多个可能会话中一样。因此,我不能使用不知道会话的东西。【参考方案2】:

Kris 的回答可能仍然是最好的选择,但您可能需要一个杂项来保持终端服务器的理智。

在您想充当“服务器”应用程序的任何应用程序上,您都可以打开一个未使用的端口,并将其显示为输入“客户端”应用程序。甚至可能利用环境变量。根据您的需要,这种方法可能全错。

如果您只有两个应用程序,其中一个需要在另一个更改时得到通知(而不是通知实际更改的内容),您可能可以通过发送和挂钩 windows 消息来做到这一点。

【讨论】:

【参考方案3】:

命名管道和邮槽仍然是一些可用的最佳选择,它们可以跨用户和跨进程工作。当然,在 Vista+ 中,以不同完整性级别运行的进程存在问题,并且安全性也适用于早期操作系统 - 很像文件安全性。

TCP 在同一台机器上总是明显慢得多,甚至可能比跨进程的 WM_COPYDATA 更​​差。

使用管道或邮槽,您可以通过将会话 ID 作为名称的一部分来处理终端服务。 TCP 将始终受到其有限的端口号“命名空间”的挑战(想象一个硬盘驱动器只能包含名为 0 到 65535 的文件 - 每个连接都需要两个端口号)。

【讨论】:

以上是关于适用于 VB6 和 .net 应用程序的最佳 IPC的主要内容,如果未能解决你的问题,请参考以下文章

c# app与vb6 app通信

是否有适用于 VB6/VBA 的 JSON 解析器?

适用于 .NET 的视频聊天/会议 SDK 可行吗?

哪个日志实用程序适用于 C#(ASP.NET、WinForms)中的 .NET 应用程序? [关闭]

在 CruiseControl.net 中构建 VB6 应用程序的 DCOM 问题

asp.net中的ADO.NET实体框架适用于不同的数据库及其性能