Датаснап наследования серверных методов. и используя их через разные клиентские приложения

Я создаю 3 сервера данных, которые подключаются к одной базе данных и используют одну и ту же процедуру входа в систему.

Моя первая мысль заключается в том, что я должен унаследовать свои методы сервера от базового класса метода сервера, который имеет процедуру входа в систему. см. псевдокод:

tsimplemethods
procedure login:virtual

tserver1 = class(tsimplemethods)
procedure doseomething

tserver2 = class(tsimplemethods)
procedure dosomethingelse

Это работает, и я могу генерировать методы клиента datasnap для 2 серверов. Проблема в том, когда я хочу использовать процедуру входа в систему в модуле входа, который я хочу использовать для 3 разных клиентских приложений, которые подключаются к 3 разным серверам с одной и той же процедурой входа в систему. псевдокод:

unit login
procedure login
var
  tmpM:tsimplemethodsclient
begin
  tmpM.login;
end;

но это дает исключение, что TSimpleservermethods.login не предоставляется на сервере. Это работает, если я делаю в клиенте для 1 из серверов. например:

unit client1
procedure login
var
  tmpM:TServer1Methods;
begin
  tmpM.login;
end;

Я думал, что модуль входа должен знать, какие методы сервера использовать. может быть через событие или используя класс Template для входа в систему.

* РЕДАКТИРОВАТЬ: * возможный обходной путь: я изменил ServerMethodClient, чтобы включить ServerClassname, который я могу изменить на производный serverclass.

procedure TSimpleServerMethodsClient.Login();
begin
  if FPW_LoginCommand = nil then
  begin
    FPW_LoginCommand := FDBXConnection.CreateCommand;
    FPW_LoginCommand.CommandType := TDBXCommandTypes.DSServerMethod;
//I changed this
    FPW_LoginCommand.Text := MyServerClassname+'.Login'; 
// instead of 'TSimpleserverMethods.login
    FPW_LoginCommand.Prepare;
  end;

  FPW_LoginCommand.ExecuteUpdate;   


end;

Это похоже на работу.

0 ответов

Другие вопросы по тегам