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

时间:2009-03-19 03:47:54

标签: .net vb6 ipc

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

3 个答案:

答案 0 :(得分:2)

如果你想能够在Vista或Windows 7上运行,那么IPC的最佳形式将是TCP(使用Winsock控件可以很容易地从VB6完成)。

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

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

答案 1 :(得分:1)

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

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

如果您只是有两个应用程序需要在其他应用程序发生更改时通知(并且未通知实际更改的内容),您可以通过发送和挂接Windows消息来实现。

答案 2 :(得分:1)

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

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

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