gpt4 book ai didi

delphi - 带身份验证的 DataSnap 回调

转载 作者:行者123 更新时间:2023-12-02 00:05:24 24 4
gpt4 key购买 nike

我可以在 datasnap 服务器和客户端之间使用“回调”作为示例 here作者:帕维尔·格洛瓦茨基但是,当我通过简单例份验证在服务器表单上添加 DSAuthenticationManager1 时,我无法在客户端注册回调。

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

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

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

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

如何将登录参数导入 DSAuthenticationManager1?

最佳答案

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

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

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

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

关于delphi - 带身份验证的 DataSnap 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18919941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com