Обратные вызовы DataSnap с аутентификацией
Я могу использовать "Обратные вызовы" между сервером datasnap и клиентами, приведенными в качестве примера здесь Павлом Гловаки. Но когда я добавляю DSAuthenticationManager1 в форму сервера с простой аутентификацией, то на стороне клиента я не могу зарегистрировать обратные вызовы.
Я получаю эту ошибку: "Исключительный класс TDBXError с сообщением" Удаленная ошибка: диспетчер аутентификации отклонил учетные данные пользователя. Это может быть связано с неправильной комбинацией имени пользователя и пароля DS "."
Я добавил данные для входа в SQLConnection на клиенте следующим образом:
SQLConnection1.Params.Values['DSAuthenticationUser'] := Username;
SQLConnection1.Params.Values['DSAuthenticationPassword'] := Password;
Таким образом, мой SQLConnection1 успешно подключается к серверу. Но я не могу найти какой-либо способ для DSAuthenticationManager1.
Как я могу импортировать параметры входа в DSAuthenticationManager1?
1 ответ
TDSClientCallbackChannelManager
Компонент в Delphi-XE не включает в себя те же свойства, что и в Delphi-XE2. Когда я добавляю этот компонент в свой проект (XE2), у меня Username
а также Password
свойства, которые передаются серверу DataSnap DSAuthenticationManager.OnUserAuthenticate
метод всякий раз, когда RegisterCallback()
или же UnregisterCallback()
называются.
У вас есть последнее обновление XE? Если имя пользователя и пароль отсутствуют в последнем обновлении, вам, вероятно, потребуется обновить систему до XE2, чтобы использовать TDSAuthenticationManager
в сервере DataSnap и TDSClientCallbackChannelManager
в клиенте.
Я думал, что, возможно, вы могли бы создать свой собственный класс из TSDClientCallbackChannelManager
и переопределите методы, которые добавляют имя пользователя и пароль к DBXConnection, что дает вам возможность добавить их самостоятельно. Я пробовал это, но методы, которые должны быть переопределены, не являются virtual
, Я подумал, что, возможно, смогу скрыть методы-предки, продвигая методы с такими же именами в моем новом классе, как public
тогда как они были protected
в классе предков. Он генерировал код и связывал его с моим клиентским приложением (это видно по синим точкам рядом с новыми строками кода), но он не вызывал мой код во время выполнения. Вместо этого он всегда вызывал методы предка (DBXConnectionProperties
а также ExecuteRemote
).
Я думаю, что ваше единственное решение - либо обновить XE2, либо не использовать диспетчер аутентификации на сервере.