
我第一次遇到这个问题时,我创建了一个常规DataSnap REST服务器作为VCL应用程序和常规windows服务,并将相关部分从REST服务器复制到服务中.只需确保该服务的输出目录与VCL应用程序的目录相同.
服务的.dpr可能如下所示:
program Service;uses Vcl.SvcMgr,Web.WebReq,IDhttpWebbrokerBrIDge,WebModuleUnit1 in '..\GUI\WebModuleUnit1.pas' {WebModule1: TWebModule},ServerMethodsUnit1 in '..\GUI\ServerMethodsUnit1.pas' {ServerMethods1: TDSServerModule},ServerContainerUnit1 in '..\GUI\ServerContainerUnit1.pas' {ServerContainer1: TDataModule},Unit1 in 'Unit1.pas' {Service1: TService};{$R *.RES}begin if not Application.DelayInitialize or Application.Installing then Application.Initialize; if WebRequestHandler <> nil then WebRequestHandler.WebModuleClass := WebModuleClass; Application.CreateForm(TService1,Service1); Application.Run;end. 该服务的主要单元可能如下所示:
unit Unit1;interfaceuses WinAPI.windows,WinAPI.Messages,System.SysUtils,System.Classes,Vcl.Graphics,Vcl.Controls,Vcl.SvcMgr,Vcl.Dialogs,Web.httpApp;type TService1 = class(TService) procedure ServiceCreate(Sender: TObject); procedure ServiceExecute(Sender: TService); procedure ServiceStart(Sender: TService; var Started: Boolean); procedure ServiceStop(Sender: TService; var Stopped: Boolean); private FServer: TIDhttpWebbrokerBrIDge; procedure TerminateThreads; public function GetServiceController: TServiceController; overrIDe; end;var Service1: TService1;implementation{$R *.DFM}uses //Datasnap.DSService; // XE2 Datasnap.DSSession; // XE3procedure ServiceController(CtrlCode: DWord); stdcall;begin Service1.Controller(CtrlCode);end;{ TService1}function TService1.GetServiceController: TServiceController;begin Result := ServiceController;end;procedure TService1.ServiceCreate(Sender: TObject);begin FServer := TIDhttpWebbrokerBrIDge.Create(Self);end;procedure TService1.ServiceExecute(Sender: TService);begin while not Terminated do begin Sleep(1000); ServiceThread.ProcessRequests(False); end;end;procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);begin if not FServer.Active then begin FServer.Bindings.Clear; FServer.DefaultPort := 8080; FServer.Active := True; end;end;procedure TService1.ServiceStop(Sender: TService; var Stopped: Boolean);begin TerminateThreads; FServer.Active := False; FServer.Bindings.Clear; ServiceThread.Terminate;end;procedure TService1.TerminateThreads;begin if TDSSessionManager.Instance <> nil then TDSSessionManager.Instance.TerminateallSessions;end;end. 总结 以上是内存溢出为你收集整理的delphi – DataSnap Rest Server Windows服务全部内容,希望文章能够帮你解决delphi – DataSnap Rest Server Windows服务所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)