Skip to content
mobius1qwe edited this page Nov 6, 2026 · 1 revision

Home > Colocar no ar > IIS e Apache 🚧

Dentro do IIS (ISAPI) e do Apache (módulo)

Important

Em desenvolvimento (2.0). Ainda não está numa versão lançada e pode mudar.

Vale para a 2.0 · ISAPI: Delphi XE em diante · Apache 2.4: Delphi (com Web.HTTPD24Impl) e Lazarus/FPC 3.2 em diante · Nível: intermediário

Em uma frase: o TRALWebBrokerServer vive dentro de uma DLL que o IIS ou o Apache carregam uma vez; o servidor RAL fica ativo enquanto ela estiver carregada.

Você vai precisar: o pacote WebBrokerRAL (no Delphi ele usa o WebBroker, pacote inet; no Lazarus, o custapache24 do fcl-web).

ISAPI (Delphi)

library minhaapi;

uses
  Winapi.ActiveX, System.Win.ComObj, Web.WebBroker, Web.Win.ISAPIApp,
  Web.Win.ISAPIThreadPool, RALWebBrokerServer, uRotas;

exports
  GetExtensionVersion, HttpExtensionProc, TerminateExtension;

begin
  CoInitFlags := COINIT_MULTITHREADED;
  Application.Initialize;
  Application.WebModuleClass := TRALWebBrokerModule;
  Servidor := TRALWebBrokerServer.Create(nil);
  MontarRotas(Servidor);
  Servidor.Active := True;    // os plugins ligam aqui, uma vez
  Application.Run;
end.

No IIS: ISAPI and CGI Restrictions libera a DLL e um Handler Mapping ISAPI-dll a executa. A rota é o que vem depois do nome da DLL: /api/minhaapi.dll/clientes chega como /clientes.

Apache 2.4 (Delphi)

library mod_minhaapi;

uses
  Web.WebBroker, Web.ApacheApp, Web.HTTPD24Impl, RALWebBrokerServer, uRotas;

var
  GModuleData: TApacheModuleData;

exports
  GModuleData name 'minhaapi_module';

begin
  Web.ApacheApp.InitApplication(@GModuleData);
  Application.Initialize;
  Application.WebModuleClass := TRALWebBrokerModule;
  ... (servidor como acima)
  Application.Run;
end.
LoadModule minhaapi_module modules/mod_minhaapi.dll
<Location /api>
  SetHandler mod_minhaapi-handler
</Location>

Antes do Delphi 13 o Apache não entrega a lista de cabeçalhos: o RAL lê os usuais (Authorization, Cookie, Accept-*, X-Forwarded-*...); outros, ponha os nomes em ExtraHeaders.

Apache 2.4 (Lazarus)

library ralapache;
{$MODE OBJFPC}{$H+}
uses cthreads, httpd24, RALWebBrokerServer, uRotas;

var
  ral_module: module; public name 'ral_module';
exports
  ral_module name 'ral_module';

begin
  Servidor := TRALWebBrokerServer.Create(nil);
  MontarRotas(Servidor);
  Servidor.Active := True;
  RALApacheStart(ral_module, 'ral_module', 'ral-handler');
end.

No Linux compile com código relocável (-Cg). No httpd.conf, LoadModule ral_module /caminho/libralapache.so e SetHandler ral-handler.

Erros comuns

sintoma causa
503 "no active TRALWebBrokerServer" o servidor não foi ativado no bloco principal da DLL
corpo de POST cortado um WebBroker antigo; atualize para o RAL 2.0 (lê o resto com ReadClient)
cabeçalho próprio não chega (Apache, Delphi < 13) acrescente o nome em ExtraHeaders

Veja também

Clone this wiki locally