在我们的应用程序(一个文档管理系统)中,我们应该被通知屏幕更改(或通知其他程序屏幕更改),以便保持两个应用程序查看相同的数据,一个是订单执行应用程序,另一个是原始传真的文档查看器。订单执行应用程序是用vb6编写的,文档管理器在.net 3.5(c#)中。它在终端服务器上运行,因此还必须具有会话意识。文档查看器或订单执行应用程序可以首先打开,两者都可以在没有其他情况下使用。什么是最好的IPC方法?
最佳IPC适用于VB6和.NET应用程序。
原标题:
问题回答
如果你想在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的文件的硬盘 - 每个连接都需要两个端口号)。
相关问题
热门标签
- winforms
- combobox
- fogbugz
- java
- date
- internationalization
- asp.net
- iis
- url-rewriting
- urlrewriter
- c#
- enums
- ocaml
- haxe
- algorithm
- string
- viewstate
- .net
- c++
- c
- symbol-table
- mysql
- database
- postgresql
- licensing
- migration
- vb.net
- vb6
- declaration
- vb6-migration
- python
- psycopg2
- backup
- vmware
- virtualization
- gnu-screen
- authentication
- desktop
- excel
- xll
- cultureinfo
- regioninfo
- oracle
- client
- session
- download
- html
- virtual
- constructor
- scenarios
- perl
- full-text-search
- javascript
- ajax
- testing
- oop
- inheritance
- vim
- encapsulation
- information-hiding