Учебный пример: Простой сервис DataSnap XE – калькулятор

By: Vsevolod Leonov

Abstract: В этой статье рассматривается создание простого сервиса Delphi XE на примере «калькулятора», которые реализует базовые функции арифметических вычислений. Этот пошаговый учебный пример очень прост, поэтому даже начинающие программисты Delphi смогут его воспроизвести. Целью этого учебного примера является знакомство с процессом создания клиентов и серверов DataSnap. Наш простой «калькулятор в виде сервиса» подразумевает клиентское и серверное приложение. Обе программы – Delphi VCL Forms Win32, а для связи используется протокол TCP/IP. Надеемся, вам понравится!

In This Article

Создаем простое серверное приложение

Первым шагом является создание нового серверного приложения DataSnap с использованием мастера “DataSnap Server”.

Запустите Delphi XE.

Выберите в главном меню “File -> New -> Other”, а затем в диалоге “New Items” щелкните два раза на иконке “DataSnap Server” в категории “Delphi Projects -> DataSnap Server”.

На первой странице оставьте по-умолчанию опцию “Project type” как “VCL Forms Application”.

На второй странице мастера также оставьте уже выбранные опции. Далее мы заменим демонстрационные методы (Sample Methods) сервера нашими вариантами.

На третьем изображении мы оставим значение по-умолчанию “211” для номера порта TCP/IP. Старайтесь всегда проводить проверку доступности порта путем нажатия на кнопку “Test Port”.

На последней странице мы собираемся также воспользоваться опцией по-умолчанию для выбора базового класса как “TComponent”, от которого будет производиться наш класс, реализующий методы сервера.

Нажмите на кнопку “Finish”, а мастер создаст новый проект с тремя модулями.

Сохраните весь проект выбором “File -> Save All”.

Создайте новую папку для всех файлов для данного учебного примера “C:\DataSnapLabs\SimpleCalc\”.

Сохраните главную форму приложения как “FormServerUnit”, а для остальных имен воспользуйтесь стандартными названиями – “ServerContainerUnit1” и “ServerMethodsUnit1” – и сохраните проект как “SimpleCalcServer”.

На этой стадии в окне Delphi Project Manager вы видите следующую картину:

Откройте модуль “ServerMethodsUnit1.pas” и реализуйте функциональность простого сервиса, выполняющего арифметические действия. Замените демонстрационные методы, добавленные мастером (“EchoString” и “ReverseString”), на нужные нам варианты “Add” («сложить»), “Subtract” («вычесть»), “Multiply” («умножить») и “Divide” («разделить»).

Исходный код для модуля “ServerMethodsUnit1” должен выглядеть следующим образом:

unit ServerMethodsUnit1;

interface

uses
  Classes;

type
{$METHODINFO ON}
  TServerMethods1 = class(TComponent)
  private
    { Private declarations }
  public
    function Add(a, b: double): double;
    function Subtract(a, b: double): double;
    function Multiply(a, b: double): double;
    function Divide(a, b: double): double;
  end;
{$METHODINFO OFF}

implementation

{ TServerMethods1 }

function TServerMethods1.Add(a, b: double): double;
begin
  Result := a + b;
end;

function TServerMethods1.Subtract(a, b: double): double;
begin
  Result := a - b;
end;

function TServerMethods1.Multiply(a, b: double): double;
begin
  Result := a * b;
end;

function TServerMethods1.Divide(a, b: double): double;
begin
  Result := a / b;
end;

end.

Листинг 1: ServerMethodsUnit1.pas.

Вы полностью реализовали наш сервер. Для того чтобы реализовать клиентское приложение, сервер должен быть запущен.

Выберите “Run -> Run Without Debugging” для запуска сервера (вне отладчика) и минимизируйте его окно.

Не завершайте работу серверного приложения до окончания учебного примера.

Создаем простое клиентское приложение

Кликните правой кнопкой мыши на project group внутри Project Manager и выберите “Add New Project”.

В диалоге “New Items” выберите “VCL Forms Application” из категории “Delphi Projects”.

Нажмите “OK”. К существующей project group должен добавиться новый проект.

Выполните сохранение нового проекта “File -> Save All”.

Выберите папку, которую вы создали для сохранения файлов проекта сервера, и сохраните туда главную форму клиентского приложения как “FormClientUnit”, сам проект как “SimpleCalcClient”, а всю project group как “SimpleCalcGrp”.

Теперь окно Project Manager должно выглядеть как:

Проверьте, что проект клиентского приложения активен, затем выберите “File -> New -> Other”, а в появившемся диалоге “New Items” выберите “DataSnap Client Module”.

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

На первой странице оставьте “DataSnap server location” как “Local server”.

Наш сервер DataSnap является “stand alone” (независимое отдельное приложение), поэтому просто нажмите “Next”.

Мы согласились использовать “TCP/IP” в качестве протокола, поэтому сохраним выбранную опцию.

Нажмите на “Test Connection”, чтобы проверить, действительно ли сервер «слушает» порт 211, а затем нажмем “Finish”.

Мастер добавить два модуля к нашему клиентскому приложению “ClientClassesUnit1” и “ClientModuleUnit1”.

Последней задачей в этом учебном примере является реализация интерфейса клиентского приложения.

Начнем с того, что добавим ссылку на модуль “ClientModuleUnit1” в раздел uses главного модуля формы клиента. Активируем данный модуль в редакторе и выбираем в меню “File -> Use Unit”.

Теперь в коде формы клиента нужно правильно использовать методы, экспонируемые (предлагаемые) через свойство “ClientModule1.ServerMethods1Client”. Эти методы имеют те же имена и сигнатуры, как и методы, реализованные на сервере.

Ниже показана реализация главной формы клиентского приложения.

unit FormClientUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm3 = class(TForm)
    EditA: TEdit;
    ButtonAdd: TButton;
    EditB: TEdit;
    ButtonSub: TButton;
    ButtonMult: TButton;
    ButtonDiv: TButton;
    LabelResult: TLabel;
    procedure ButtonAddClick(Sender: TObject);
    procedure ButtonSubClick(Sender: TObject);
    procedure ButtonMultClick(Sender: TObject);
    procedure ButtonDivClick(Sender: TObject);
  private
    { Private declarations }
  public
    function GetA: double;
    function GetB: double;
    procedure ShowResult(aValue: double);
  end;

var
  Form3: TForm3;

implementation

uses ClientModuleUnit1;

{$R *.dfm}

function TForm3.GetA: double;
begin
  Result := StrToFloat(EditA.Text);
end;

function TForm3.GetB: double;
begin
  Result := StrToFloat(EditB.Text)
end;

procedure TForm3.ShowResult(aValue: double);
begin
  LabelResult.Caption := FloatToStr(aValue);
end;

procedure TForm3.ButtonDivClick(Sender: TObject);
begin
  ShowResult(ClientModule1.ServerMethods1Client.Divide(GetA, GetB));
end;

procedure TForm3.ButtonMultClick(Sender: TObject);
begin
  ShowResult(ClientModule1.ServerMethods1Client.Multiply(GetA, GetB));
end;

procedure TForm3.ButtonSubClick(Sender: TObject);
begin
  ShowResult(ClientModule1.ServerMethods1Client.Subtract(GetA, GetB));
end;

procedure TForm3.ButtonAddClick(Sender: TObject);
begin
  ShowResult(ClientModule1.ServerMethods1Client.Add(GetA, GetB));
end;

end.

Листинг 2: Реализация главной формы клиента.

Окончательно моя форма выглядит следующим образом:

Наверное, вам не нужно рассказывать, как воспроизвести ее!

Теперь вы видите, как просто создавать сервера и клиенты DataSnap и использованием Delphi XEJ

Итог

В этом учебном примере мы использовали Delphi XE для построения простого сервиса DataSnap XE в виде калькулятора, который на уровне реализации представляет собой приложения Win32, при обмене данными между которыми используется протокол TCP/IP.

Весь исходный код данного учебного примера доступен по адресу https://cc.embarcadero.com/Item/28184

Видеоролик, демонстрирующий реализацию этого примера, можно найти здесь (https://www.youtube.com/watch?v=Qm__RdmIWSg).

Подробное описание возможностей технологии Delphi находится по адресу https://www.embarcadero.com/products/delphi


Published on: 4/20/2011 11:22:57 AM

Server Response from: ETNASC04

Copyright© 1994 - 2013 Embarcadero Technologies, Inc. All rights reserved.