Delphi XE - Datasnap Filter问题

我有一个使用PC1和Zlib过滤器的tcp / ip Datasnap -XE服务器 在客户端上,这两个过滤器都在DataSnap TSqlConnection中定义 当客户端连接到服务器时,我收到“Connection Closed Gracefully”错误消息 如果我自己只使用PC1过滤器 - 没有问题 如果我自己只使用Zlib过滤器 - 没有问题 关于如何让两个过滤器同时工作的任何想法?     
已邀请:
您还需要在客户端应用程序中部署libeay32.dll和ssleay32.dll。 我的Delphi XE DataSnap开发课件手册引用: “如果使用TCP / IP和RSA和PC1过滤器部署DataSnap独立服务器,则还必须部署两个Indy特定的SSL DLL:libeay32.dll和ssleay32.dll - 或确保它们已存在于服务器计算机上。 RSA过滤器需要这些DLL(它们加密PC1过滤器使用的密码)。如果没有这两个DLL,任何想要连接到服务器的客户端都将获得“Connection Closed Gracefully”消息,因为服务器无法加载两个DLL以启动RSA过滤器以加密PC1密钥等。 顺便说一句,任何DataSnap客户端都需要相同的两个DLL,无论是使用RSA和PC1过滤器连接到TCP / IP服务器,还是使用HTTPS连接到ISAPI过滤器。 Groetjes,Bob Swart     
这可能是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这是Bob Swart关于Embarcadero论坛的帖子,说它足以在服务器上添加过滤器。不是Embarcadero直接但非常接近:) https://forums.embarcadero.com/thread.jspa?threadID=48875&tstart=0     
  直到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"}}');
    

要回复问题请先登录注册