Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Delphi para la web (https://www.clubdelphi.com/foros/forumdisplay.php?f=51)
-   -   No puedo cargar una dll ISAPI de WebBroker cuando le agrego un DataModule (https://www.clubdelphi.com/foros/showthread.php?t=96756)

TrUnkS 24-06-2024 23:00:46

No puedo cargar una dll ISAPI de WebBroker cuando le agrego un DataModule
 
Buenas..., uso Delphi 12.1.1. He creado un proyecto nuevo de WebBroker como dll ISAPI y sin meterle mano guardo el proyecto tal cual como lo crea el asistente sin hacer nada mas. Compilo la dll y y la llevo al servidor a la carpeta del sitio (parando el servidor primero y refrescando el pool). Para saber si la dll esta cargada correctamente voy al navegador y la llamo (localhost/Project1.dll) y efectivamente me muestra el mensaje "Web Server Application". Creo un nuevo proyecto haciendo lo mismo pero le cambio el texto al mensaje "Web Server Aplication PRUEBA 2", bajo el servidor y cargo la nueva dll y efectivamente me muestra "Web Server Application PRUEBA 2". Creo un nuevo proyecto y haciendo lo mismo le agrego un modulo de datos (DataModule), compilo y llevo la dll a la carpeta del sitio, ya esta vez no hace nada, se queda pensando. Vuelvo a cargar las anteriores dll y no hay problema, todas funcionan bien, pero le meto un modulo de datos y ya se cuelga. ¿ A Alguien le ha pasado lo mismo ?. Gracias

TrUnkS 25-06-2024 00:31:42

Estimados, Quizás le pueda servir a alguien. Lo pude solucionar considerando que Delphi crea instancias de los módulos de datos en tiempo de diseño en el archivo del proyecto(dpr):

Código Delphi [-]
library Project1;

uses
  Winapi.ActiveX,
  System.Win.ComObj,
  Web.WebBroker,
  Web.Win.ISAPIApp,
  Web.Win.ISAPIThreadPool,
  WebModuleUnit1 in 'WebModuleUnit1.pas' {WebModule1: TWebModule},
  DataModule1Unit1 in 'DataModule1Unit1.pas' {DataModule1: TDataModule};

{$R *.res}

exports
  GetExtensionVersion,
  HttpExtensionProc,
  TerminateExtension;

begin
  CoInitFlags := COINIT_MULTITHREADED;
  Application.Initialize;
  Application.WebModuleClass := WebModuleClass;
  Application.CreateForm(TDataModule1, DataModule1); // <--- instancia del módulo de datos
  Application.Run;
end.

Como había creado y liberado los módulos de datos dentro de las Actions del WebModule no supuse que habría problema por ese motivo, pero no consideré eliminar las instancias creadas por Delphi en el archivo de proyecto.

Código Delphi [-]
library Project1;

uses
  Winapi.ActiveX,
  System.Win.ComObj,
  Web.WebBroker,
  Web.Win.ISAPIApp,
  Web.Win.ISAPIThreadPool,
  WebModuleUnit1 in 'WebModuleUnit1.pas' {WebModule1: TWebModule},
  DataModule1Unit1 in 'DataModule1Unit1.pas' {DataModule1: TDataModule};

{$R *.res}

exports
  GetExtensionVersion,
  HttpExtensionProc,
  TerminateExtension;

begin
  CoInitFlags := COINIT_MULTITHREADED;
  Application.Initialize;
  Application.WebModuleClass := WebModuleClass;
  //Application.CreateForm(TDataModule1, DataModule1); 
  Application.Run;
end.
Código Delphi [-]
procedure TWebModule1.WebModule1DefaultHandlerAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
 DataModule1 := TDataModule1.Create(nil);
 try
  DataModule1.FDConnection1.Connected := True;
  Response.Content :=
    '' +
    'Web Server Application (datamodule in runtime)' +
    'Web Server Application (datamodule in runtime)' +
    '';
 finally
  DataModule1.Free;
 end;
end;

WHILENOTEOF 25-06-2024 00:35:45

Imagino que el datamodule tendrá algo, asegúrate que funciona (coonexiones, que no estén abiertas antes de establecer parámetros de conexión, cosas de ese tipo). Si tienes clientdatasets mira que tengas puesta midas.dll en el directorio o pon la unit Midaslib. Aunque se puede depurar la dll isapi, yo prefiero crearme un proyecto de escritorio que utilice todo el resto de la isapi y así puedo depurar mejor para identificar problemas. Suele ser un tema que da bastante guerra por pequeñas chorradas, pero al final (como todo) va.

P.D. , ya veo que lo has solucionado, esas son las "pequeñas chorradas" de las que hablaba.


La franja horaria es GMT +2. Ahora son las 00:09:41.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi