具有身份验证的数据快照回调



我可以在datasnap服务器和客户端之间使用"回调"作为Pawel Glowacki的例子。但是,当我使用简单的身份验证在服务器窗体上添加 DSAuthenticationManager1 时,在客户端我无法注册回调。

我收到此错误:"异常类 TDBXError 与消息'远程错误:身份验证管理器拒绝用户凭据。这可能是由于 DS 用户名和密码的组合无效。

我在客户端上向 SQLConnection 添加了登录详细信息,如下所示:

SQLConnection1.Params.Values['DSAuthenticationUser'] :=  Username;
SQLConnection1.Params.Values['DSAuthenticationPassword'] := Password;

所以我的 SQLConnection1 成功连接到服务器。但是我找不到任何方法来管理DSAuthenticationManager1。

如何将登录参数导入 DSAuthenticationManager1?

Delphi-XE 中的 TDSClientCallbackChannelManager 组件不包含与 Delphi-XE2 中相同的属性。 当我将此组件添加到我的项目 (XE2) 时,我有UsernamePassword属性,每当调用RegisterCallback()UnregisterCallback()时,这些属性都会传递给 DataSnap 服务器的 DSAuthenticationManager.OnUserAuthenticate 方法。

你有最新的XE更新吗? 如果用户名和密码不在最新更新中,则可能需要升级到 XE2 才能在 DataSnap 服务器中使用TDSAuthenticationManager并在客户端中使用TDSClientCallbackChannelManager

我想也许你可以从TSDClientCallbackChannelManager创建自己的类,并覆盖将用户名和密码添加到DBXConnection的方法 - 从而给你一种自己添加它们的方法。 我试过这个,但是需要覆盖的方法并不virtual. 我想也许我可以通过在public的新类中提升同名的方法来隐藏祖先方法,而它们在祖先类中protected。 它生成代码并将其链接到我的客户端应用程序(从新代码行旁边的蓝点可以看出),但它不会在运行时调用我的代码。 它总是调用祖先方法(DBXConnectionPropertiesExecuteRemote)。

我认为您唯一的解决方案是更新到 XE2,或者不使用服务器上的身份验证管理器。

最新更新