Hi zusammen
Der Titel ist vielleicht etwas...äääh...gewöhnungsbedürftig, aber mir ist nichts besseres eingefallen.
Der Hintergrund:
In einer Projektgroup befinden sich 2 Projekte: Eine mit Webbroker erstellte
ISAPI-
DLL und eine EXE.
Aufgabe der EXE ist es, die Anfrage entgegenzunehmen und einer existierenden Session zuzuweisen, bzw. eine solche im Falle einner Erstanfrage neu zu erstellen. Anschliessend soll die Anfrage an die
DLL, bzw. deren Webmodul weitergeleitet werden.
Anfänglich hab ich das mit IdHttpServer versucht. Das klappt insofern ganz 'gut', als dass ein in der IdHTTPServer1CommandGet-Methode gesetzter Haltepunkt angesprungen wird, wenn im Browser die
URL eingegeben wird. Aber jetzt mal erst der Code:
Delphi-Quellcode:
{$R *.dfm}
procedure TDelborMainServer.FormCreate(Sender: TObject);
var AClass: TComponentClass;
begin
// FHTMLDir := ExtractFilePath(Application.ExeName) + 'HTML';
FIdHTTPWebBrokerBridge := TIdHTTPWebBrokerBridge.Create;
FIdHTTPWebBrokerBridge.AutoStartSession := True;
FIdHTTPWebBrokerBridge.ServerSoftware := '
DelborMainServer';
FIdHTTPWebBrokerBridge.OnConnect := OnIdHTTPWebBrokerBridgeConnect;
FIdHTTPWebBrokerBridge.OnCommandOther := OnIdHTTPWebBrokerBridgeComandother;
FIdHTTPWebBrokerBridge.DefaultPort := 8000;
FIdHTTPWebBrokerBridge.Active := True;
end;
procedure TDelborMainServer.IdHTTPServer1CommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var LFileName, LPathname:
String; OK: Boolean; ECB: TEXTENSION_CONTROL_BLOCK;
begin
OK := DelborFotoGalery(AContext,ARequestInfo, AResponseInfo);
end;
procedure TDelborMainServer.OnIdHTTPWebBrokerBridgeComandother(AThread: TIdContext;
//<===
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
beep;
end;
procedure TDelborMainServer.OnIdHTTPWebBrokerBridgeConnect(AContext: TIdContext);
//<===
begin
beep;
end;
function DelborFotoGalery(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo):Boolean;
var Handle: THandle; DelborFotoGalery: TDelborFotoGalery;
begin
Handle:=LoadLibrary(PChar(ExtractFilePath(ParamStr(0))+'
DelborProject1.dll'));
if Handle <> 0
then begin
@DelborFotoGalery := GetProcAddress(
Handle, '
HttpExtensionProc');
// ): DWORD
if @DelborFotoGalery <>
nil then begin
result := DelborFotoGalery(AContext,ARequestInfo, AResponseInfo);
end;
end;
end;
Nachdem die ersten Versuche sich nur auf die Verwendung des IdHTTPServers beschränkten, diese aber immer AVs lieferten(fehlende Servervariablen) habe ich TIdWebbrokerBridge eingebaut - eigentlich schon vom Klassennamen her einleuchtend.
Der Stand der Dinge ist allerdings: auch hier gibts eine
AV. Von zwei gesetzten Haltepunkten (durch Pfeile markiert)wird vor Auslösen der
AV gerademal der untere (OnIdHTTPWebBrokerBridgeConnect) ausgelöst.
Was mache ich falsch? Alles, was für mich schon fast sicher ist: Ich brauche die
DLL gar nicht so aufzurufen, wie ich das in DelborFotoGalery tue...
Auch die
DLL ist im Grunde noch nicht fertig entwickelt; das Webmodul dieser Webbroker-Anwendung wird noch durch ein normales Datenmodul mit Webdispatcher ersetzt. Mein Konzept sieht vor, dass die gesamte Anwendung letzten Endes auf einer(?) Datenbank basiert.
Und zum Schluss vielleicht noch die Info, die wohl an den Anfang gehört hätte: die Anwendung soll auf einem Windows-Server laufen. Vielen Dank für eure - hoffentlich zahlreichen - Antworten! Auch über Sinn und Unsinn einer EXE (die ja nicht zwingend eine CGI-Anwendung sein muss(??), lasse ich gerne mit mir reden.
Gruss
Delbor