2

我可以在数据快照服务器和客户端之间使用“回调”作为 Pawel Glowacki的示例。但是当我使用简单的身份验证在服务器表单上添加 DSAuthenticationManager1 时,在客户端我无法注册回调。

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

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

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

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

如何将登录参数导入 DSAuthenticationManager1?

4

1 回答 1

2

Delphi-XE 中的TDSClientCallbackChannelManager组件不包含与 Delphi-XE2 中相同的属性。当我将此组件添加到我的项目 (XE2) 中时,我有Username和属性,无论何时或被调用Password,它们都会传递给 DataSnap 服务器的DSAuthenticationManager.OnUserAuthenticate方法。RegisterCallback()UnregisterCallback()

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

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

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

于 2013-09-26T02:44:14.220 回答