2011-02-17 112 views
2

我有一个使用PC1和zlib过滤德尔福XE - 的DataSnap过滤问题

在客户端这两个过滤器在的DataSnap设为TSQLConnection

定义的TCP/IP的DataSnap -xe服务器当客户端连接到服务器,我收到了“连接关闭优雅地”错误信息

如果我只用它自己的PC1过滤器 - 是没有问题的

如果我只使用zlib的网络连接过滤器本身 - 没有问题

有关如何让两个过滤器同时工作的任何想法?

回答

3

您需要在您的客户端应用程序中部署libeay32.dll和ssleay32.dll。

从我的德尔福XE的DataSnap开发课件手动引述:

“如果你部署了DataSnap独立的服务器,使用TCP/IP和RSA和PC1过滤器,则还必须部署两个印特定SSL DLL文件: libeay32.dll和ssleay32.dll - 或者确保它们已经存在于服务器机器上,这些DLL是RSA过滤器(它加密了PC1过滤器使用的密码)所需要的,如果没有这两个DLL,任何想要连接的客户端到服务器将得到“Connection Closed Gracefully”消息,因为服务器无法加载两个DLL来启动RSA过滤器来加密PC1密钥等。

顺便说一下,无论是使用RSA和PC1过滤器连接到TCP/IP服务器,还是使用HTTPS连接到ISAPI过滤器,任何DataSnap客户端都需要相同的两个DLL。“

Groetjes,Bob Swart

+1

我已经把的libeay32.dll和ssleay32.dll在同一目录中clients.exe,但我仍然得到“关闭连接优雅地”的错误消息。有关服务器 – 2011-02-18 09:28:24

+0

什么?是服务器也能够找到这两个DLL? – 2011-02-18 19:31:06

+0

我刚刚偶然发现了这个讨论,但无论如何: “连接关闭良好”是一个“例外”,但不应该被视为“错误”。 Indy - DataSnap使用的TCP库使用该异常来表示连接已经被终止 - 意图。 这可能令人困惑,但这是Indy如何工作的方式。 – 2012-07-13 17:28:20

3

这可能是DataSnap中的一个错误。我有完全相同的问题,这里是QC报告。 http://qc.embarcadero.com/wc/qcmain.aspx?d=91180

对QC报告进行投票修复并等待Delphi-XE的更新。

编辑1 一个疯狂的想法,不要在客户端指定过滤器。

这是来自Pawel Glowacki在运输过滤器上的一篇论文。 http://edn.embarcadero.com/article/41293 他特别提到你应该将ZLibCompression添加到客户端上的DataSnap驱动程序的Filters属性。

我已经测试过不这样做,它工作得很好。您必须将DBXCompressionFilter添加到uses子句,否则您会收到“ZLibCompression未注册”错误。

使用服务器上的PC1和ZLibCompression,并且客户端上没有筛选器,所有接缝都按预期工作。我已检查了流量,并对其进行了加密和压缩。

直到来自Embarcadero的人确认这是应该的方式,我才会在使用它之前考虑三次。

编辑2这里是由鲍勃·斯沃特Embarcadero公司讨论论坛一个帖子说,这是足够添加服务器上的过滤器。不Embarcadero公司直接,但非常接近:) https://forums.embarcadero.com/thread.jspa?threadID=48875&tstart=0

3

到从英巴卡迪诺有人证实,这是事情应该是这样我会三思而后我用它。

这是事实。如果您不在客户端指定过滤器,则会在连接期间在初始握手协议中告知服务器的过滤器,并自动添加它们。这是使用过滤器的完全合理和安全的方式。

但是,请注意,这是不正确的相反。服务器不采用来自连接客户端的过滤器。如果客户端上有一个RSA过滤器,但是服务器上没有匹配的过滤器,那么您将在连接时发生异常,并说服务器没有匹配的RSA过滤器。客户端上但不在服务器上的任何其他过滤器都将被忽略。

2

尝试颠倒过滤器的顺序,使客户端始终与服务器相反。 如

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"}}');