2017-03-18 3 views
4

dans une procédure TWebModule comment obtenir la demande actuelle?Delphi TWebModule (IIS-ISAPI): obtenir la demande actuelle

J'ai essayé:

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

, mais il semble que la première demande produite sur TWebModule création.

Je sais que je suis capable de passer la demande aux procédures/fonctions suivantes de chaque TWebActionItem, mais je veux éviter de passer la demande partout. Des conseils?

Mise à jour

Après avoir creusé dans le code, je l'ai trouvé WebContext et il semble la solution, par exemple .:

uses Web.WebCntxt; 

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

est la bonne façon? WebContext semble toujours nil.

Je suis sur la mise à jour Delphi Berlin 2.

Répondre

3

Chaque demande passe par un TWebActionItem défini dans le TWebModule.Actions. Le TWebActionItem a un événement OnAction. Là, vous obtiendrez l'objet TWebRequest de la demande actuelle.

Ensuite, vous êtes en mesure de le transmettre aux procédures/fonctions suivantes.

+0

oui, mais je veux éviter de passer la demande partout –

+1

Je pense que chaque demande sera traitée dans un fil séparé. Donc, vous devriez le passer pour éviter les conflits de threads. Vous pouvez également le stocker en tant que champ de classe. Mais alors vous devez gérer des multi-threads. – Andreas

+0

Vous pourriez en faire un threadvar comme les webmodules SOAP ou Datasnap. –