【发布时间】:2011-06-29 10:29:01
【问题描述】:
我有一个使用 PC1 和 Zlib 过滤器的 tcp/ip Datasnap -XE 服务器
在客户端,这两个过滤器都在 DataSnap TSqlConnection 中定义
当客户端连接到服务器时,我收到 “正常关闭连接” 错误消息
如果我只单独使用 PC1 过滤器 - 没有问题
如果我只单独使用 Zlib 过滤器 - 没有问题
关于如何让两个过滤器同时工作有什么想法吗?
【问题讨论】:
我有一个使用 PC1 和 Zlib 过滤器的 tcp/ip Datasnap -XE 服务器
在客户端,这两个过滤器都在 DataSnap TSqlConnection 中定义
当客户端连接到服务器时,我收到 “正常关闭连接” 错误消息
如果我只单独使用 PC1 过滤器 - 没有问题
如果我只单独使用 Zlib 过滤器 - 没有问题
关于如何让两个过滤器同时工作有什么想法吗?
【问题讨论】:
您还需要将 libeay32.dll 和 ssleay32.dll 与您的客户端应用程序一起部署。
引用我的 Delphi XE DataSnap 开发课件手册:
“如果您使用 TCP/IP 以及 RSA 和 PC1 过滤器部署 DataSnap 独立服务器,那么您还必须部署两个 Indy 特定的 SSL DLL:libeay32.dll 和 ssleay32.dll – 或者确保它们已经存在于服务器机器。这些 DLL 是 RSA 过滤器(加密 PC1 过滤器使用的密码)所需要的。没有这两个 DLL,任何想要连接到服务器的客户端都会收到“正常关闭连接”消息,因为服务器无法加载两个 DLL 以启动 RSA 过滤器以加密 PC1 密钥等。
顺便说一句,任何 DataSnap 客户端都需要相同的两个 DLL,无论是使用 RSA 和 PC1 过滤器连接到 TCP/IP 服务器,还是使用 HTTPS 连接到 ISAPI 过滤器。”
格罗耶斯,鲍勃·斯沃特
【讨论】:
这可能是 DataSnap 中的一个错误。我有完全相同的问题,这是 QC 报告。 http://qc.embarcadero.com/wc/qcmain.aspx?d=91180
质检报告投票待修复,等待 Delphi-XE 更新。
编辑 1 一个疯狂的想法,不要在客户端上指定过滤器。
这是 Pawel Glowacki 关于传输过滤器的论文。 http://edn.embarcadero.com/article/41293 他特别提到您应该将 ZLibCompression 添加到客户端 DataSnap 驱动程序的 Filters 属性中。
我已经测试不这样做,它工作得很好。您必须将 DBXCompressionFilter 添加到 uses 子句,否则您会收到“ZLibCompression 未注册”错误。
使用服务器上的 PC1 和 ZLibCompression 并且客户端上没有过滤器,一切都可以按预期工作。我检查了流量,它是加密和压缩的。
在 Embarcadero 的某个人确认这是应该的方式之前,我会在使用它之前三思而后行。
编辑 2 这是 Bob Swart 在 Embarcadero 论坛上的一篇帖子,他说在服务器上添加过滤器足够。不是 Embarcadero 直接但非常接近:) https://forums.embarcadero.com/thread.jspa?threadID=48875&tstart=0
【讨论】:
qc.embarcadero.com 链接。如果您需要访问旧的 QC 数据,请查看 QCScraper。
在 Embarcadero 的某个人确认这是应该的方式之前,我会在使用它之前三思而后行。
这是真的。如果您没有在客户端上指定过滤器,则在连接期间的初始握手协议中会告知服务器的过滤器是什么,并自动添加它们。这是使用过滤器的一种完全合理且安全的方式。
但请注意,反之亦然。服务器不采用来自连接客户端的过滤器。如果客户端上有 RSA 过滤器,但服务器上没有匹配的过滤器,那么连接时会出现异常,说服务器没有匹配的 RSA 过滤器。客户端上而不是服务器上的任何其他过滤器都将被忽略。
【讨论】:
尝试颠倒过滤器的顺序,让客户端始终与服务器相反。 例如
Server
Filters = <
item
FilterId = 'ZLibCompression'
Properties.Strings = (
'CompressMoreThan = 1024')
end
item
FilterId = 'PC1'
Properties.Strings = (
'Key = test')
end>
Client
Params.Add ('Filters = {"PC1": {"Key": "test"}, "ZLibCompression": {"CompressMoreThan": "1024"}}');
【讨论】: