Delphi SOAP 应用程序服务器中的 WebModule

WebModule in Delphi SOAP Application Server

鉴于每个请求消息产生一个单独的线程,并且为每个线程动态创建 Web 模块及其内容的单独实例,我向 web 模块添加了 FDConnection 和 FDQuery 以便我可以发送人员档案根据请求从数据库到请求者​​。 如何访问 Web 模块实例?

在web模块中只有一个web模块元类的变量:

var
  WebModuleClass: TComponentClass = TWebModule1;

例如:

WebModule.FDQuery.Close;

CountryImpl 单元是 CountryIntf 服务的实现

unit CountryImpl;

interface

uses Soap.InvokeRegistry, System.Types, Soap.XSBuiltIns, uCountry, CountryIntf,
  WebModuleUnit1;

type

  TCountryManager = class(TInvokableClass, ICountryManager)
  public
    function GetCountry(ACountryId: integer): TCountry;
  end;

implementation


{ TCountry }

function TCountryManager.GetCountry(ACountryId: integer): TCountry;
begin
  WebModule.FDQuery.Close;
  WebModule.FDQuery.ParamByName('Id').Value := ACountryId;
  WebModule.FDQuery.Open;
end;

initialization
   InvRegistry.RegisterInvokableClass(TCountryManager);
end.

您的假设不正确:在 SOAP 服务器应用程序中仅创建了 1 个 webmodule 实例。你不应该向 webmodule 添加线程特定的功能,你必须将它添加到 CountryImp.pas。由于那里没有设计界面,您必须在该单元的函数中对 FDConnection(s) 和 FDQueries 进行运行时实例化。