2017-03-18 2 views
4

in einer TWebModule Prozedur/Funktion wie erhalten Sie die aktuelle Anfrage?Delphi TWebModule (IIS-ISAPI): Holen Sie sich die aktuelle Anfrage

Ich habe versucht:

procedure TWebModule1.DoSomething; 
var 
    aRequest : TWebRequest; 
begin 
    aRequest := Request; 
end; 

aber es scheint, die erste Anfrage auf TWebModule Schöpfung erzeugt.

Ich weiß, ich bin in der Lage, die Anfrage zu folgenden Prozeduren/Funktionen von jedem TWebActionItem zu übergeben, aber ich möchte vermeiden, die Anfrage überall zu übergeben. Irgendwelche Tipps?

aktualisieren

Nachdem in den Code zu graben, fand ich WebContext und es scheint, die Lösung, zB .:

uses Web.WebCntxt; 

procedure TWebModule1.DoSomething; 
var 
    aRequest : TWebRequest; 
begin 
    if WebContext <> nil then 
    aRequest := WebContext.Request; 
end; 

ist es der richtige Weg? WebContext scheint immer nil.

Ich bin auf Delphi Berlin Update 2.

Antwort

3

Jede Anfrage wird durch eine TWebActionItem im TWebModule.Actions definiert. Die TWebActionItem hat ein Ereignis OnAction. Dort erhalten Sie das TWebRequest Objekt der aktuellen Anfrage.

Dann können Sie es an nachfolgende Prozeduren/Funktionen übergeben.

+0

ja, aber ich möchte vermeiden, die Anfrage alle wo –

+1

übergeben Ich denke, jede Anfrage wird in einem separaten Thread behandelt werden. Sie sollten es also weitergeben, um Thread-Konflikte zu vermeiden. Sie könnten es auch als Klassenfeld speichern. Aber dann musst du mit Multi-Threads umgehen. – Andreas

+0

Sie könnten es eine Threadvar wie SOAP oder Datasnap Webmodule tun. –

Verwandte Themen