Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   isapi.dll auf Apache 2.4 (https://www.delphipraxis.net/198581-isapi-dll-auf-apache-2-4-a.html)

lowmax_5 15. Nov 2018 22:36

isapi.dll auf Apache 2.4
 
Hallo,
ich möchte eine isapi.dll auf einem Apache 2.4 Server (Win7) zum laufen bringen. Der Server selbst ist erreichbar und zeigt seine Startseite. Beim Aufruf von http://localhost:80/isapi/isapi.dll erhalte ich jedoch nur:

Code:
Not Found
The requested URL /isapi/isapi.dll was not found on this server.
In der httpd.conf habe ich folgende Eintragungen gemacht:

Code:
LoadModule isapi_module modules/mod_isapi.so

AddHandler isapi-handler .dll

<IfModule mod_testservice.c>
    # This allows ISAPI dll's and CGI exe's (both are required for regular aliases)
    AddHandler isapi-isa .dll
    AddHandler cgi-script .exe

    ScriptAlias /isapi/ "D:/Apache/test"

    <Directory "D:/Apache/test">
        Options ExecCGI
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
</IfModule>
Die 'isapi.dll' liegt in einem beliebigen Verzeichnis D:/Apache/test. Spezielle Rechte für das Verzeichnis sind nicht vergeben. Kenne mich leider mit dem Apache nicht besonders gut aus. Vielleicht hat jmd. einen Tipp - vielen Dank!

lowmax_5 16. Nov 2018 09:37

AW: isapi.dll auf Apache 2.4
 
Bin nun weiter gekommen: Mit folgendem Einträgen ist ein Zugriff möglich:

Code:
<IfModule mod_alias.c>
    # This allows ISAPI dll's and CGI exe's (both are required for regular aliases)
    AddHandler isapi-handler .dll
    #AddHandler cgi-script .exe
    ISAPICacheFile D:/Apache/isapi/isapi.dll

    Alias /isapi "D:/Apache/isapi"

    <Directory "D:/Apache/isapi">
        Options ExecCGI
        AllowOverride None
   Require all granted
    </Directory>

</IfModule>
Wenn die Isapi jedoch intern einen DB-Zugriff auslöst erhalte ich folgende Meldung:

Code:
AH02115: HSE_STATUS_ERROR result from HttpExtensionProc(): D:/Apache/isapi/isapi.dll
Habe etwas gefunden, dass Apache mit ThreadPooling nicht klar kommt und daher die Unit Web.Win.ISAPIThreadPool entfernt. Das Ergebnis ist leider das Gleiche...

mkinzler 16. Nov 2018 09:43

AW: isapi.dll auf Apache 2.4
 
Stammt die ISAPI-DLL von Dir? Dann würde ich gleich ein Apache-Modul erzeugen und verwenden.

Delphi.Narium 16. Nov 2018 09:50

AW: isapi.dll auf Apache 2.4
 
DB-Zugriff über welche Schnittstelle(n) / Komponente(n)?

Hier Auszüge aus einer "Uraltisapidll", die Reihenfolge im Uses was damals schon wesentlich und zwingend zu beachten:
Delphi-Quellcode:
library WebSQLSearch;

uses
  ActiveX,
  ComObj,
  ISAPIThreadPool,
  ISAPIApp,
  BrkrConst in '..\..\..\Delphi7\Source\Internet\BrkrConst.pas',
  WebBroker in '..\..\..\Delphi7\Source\Internet\WebBroker.pas',
  WebSQLSearchUnit1 in 'WebSQLSearchUnit1.pas' {wm: TWebModule};

{$R *.res}

exports
  GetExtensionVersion,
  HttpExtensionProc,
  TerminateExtension;

begin
  CoInitFlags := COINIT_MULTITHREADED;
  Application.Initialize;
  Application.CreateForm(Twm, wm);
  Application.Run;
end.
Am Ende der WebSQLSearchUnit1 steht:
Delphi-Quellcode:
initialization
  // Das wird für ADO dringend benötigt.
  CoInitialize(nil);

finalization
  CoUninitialize;

end.
Keine Ahnung, ob das heute auch noch so sein muss, aber eventuell hilft es ja.

Habe allerdings nie den Apache genutzt sondern nur 'nen Delphi-Indykomponenten-Eigenbau unter Windows.

lowmax_5 16. Nov 2018 16:32

AW: isapi.dll auf Apache 2.4
 
Zitat:

Stammt die ISAPI-DLL von Dir? Dann würde ich gleich ein Apache-Modul erzeugen und verwenden.
Ja dem ist so. Das wäre vermutlich der sinnvollste Weg dieses über ein Webmodule zu realisiern. Nur wie wird diese genau eingebunden? Ich habe in der Projektdatei Hinweise gefunden, aber mir ist nicht ganz klar, wie ich das erzeugte Linkmodul test.dll einbinden muss. Der Apache läuft unter Windows und die Module im Verzeichnis \module haben alle die Endung *.so. Kann ich da einfach die erzeugte test.dll hinzufügen?

mkinzler 16. Nov 2018 16:39

AW: isapi.dll auf Apache 2.4
 
Ja. Die Endung ist egal. Muss nur entsprechend in die Konfiguration eingetragen werden. (Hauptkonfig oder modulspezifische Konfigurationsdatei.

lowmax_5 18. Nov 2018 22:00

AW: isapi.dll auf Apache 2.4
 
Funktioniert nun einwandfrei als Apache-Modul. Falls jmd. ein ähnliche Fragestellung hat hier die Lösung:

In Delphi: TestLinkModul.dll erstellen compilieren für x32/x64 je nach ApacheServer

Umbenennen in mod_TestLinkModul.dll und kopieren nach Apache24\modules\


Projektdatei prüfen:
exports
GModuleData name 'TestServer';

Merken: TestServer


Nun folgenen Eintrag in der httpd.conf durchführen:

Code:
LoadModule TestServer modules/mod_TestLinkModul.dll
sowie

Code:
<Location /testmod>
  SetHandler mod_TestLinkModul-handler
</Location>

Der Aufruf erfolgt nun mit

http://localhost/testmod


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz