English 中文(简体)
最佳IPC适用于VB6和.NET应用程序。
原标题:
  • 时间:2009-03-19 03:47:54
  •  标签:

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

问题回答

如果你想在Vista或者Windows 7上运行,最好的IPC形式为TCP(这在VB6中使用Winsock控件非常容易实现)。

这样做的好处是,即使两个应用程序没有以相同用户身份运行,它们也可以进行通信(这在Vista +下使用SendMessage或Named Pipes是无法做到的)。唯一要记得做的事情是在防火墙中设置规则,以便它不会被阻止。这可以在您的安装程序中完成:

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

克里斯的答案可能仍然是最佳选择,但使用终端服务器可能需要一些折中方法来保持理智。

无论您希望哪个应用程序充当“服务器”应用程序,您都可以打开一个未使用的端口,并将其显示为输入到“客户端”应用程序中。可能甚至利用环境变量。根据您的需求,这种方法可能完全不正确。

如果你只是有两个应用程序,其中一个需要在另一个更改时收到通知(并且不需要通知实际更改的内容),你可以通过发送和钩取Windows消息来实现。

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

TCP在同一台机器内始终比跨进程的WM_COPYDATA慢得多,甚至更糟糕。

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





相关问题
热门标签