HEBERGEMENT SITES INTERNET
CGI, ISAPI, ASP, Dot NET,
PHP & MySql,
DELPHI - Firebird & INTERBASE
 
Accueil
 
 

 

 

Le but de ce didactitiel est de vous faire découvrir pas à pas, la construction d'une DLL ISAPI avec Delphi 5/6/7. Il ne sera pas question ici, de faire le tour des technologies et possibilités offertes par la dernière version de l'outil de programmation, mais simplement de vous donner la marche à suivre pour créer une DLL ISAPI..

 Portée des objets et des variables

Principe primordial

Contrairement aux idées reçues, Par défaut, le Webmodule (héritier du TDatamodule) n'est pas créé et libéré lors de chaque appel à une action.

Extraits de l'aide de la documentation de Delphi 5

Le serveur HTTP appelle les méthodes de TISAPIApplication quand il reçoit un message de requête HTTP. TISAPIApplication crée un thread pour gérer le message de requête et une nouvelle instance du module Web pour ce thread, ou réutilise une ancienne instance qui été désactivée après l'expédition d'une réponse précédente.

Le module Web d'une application serveur Web à base de DLL est mis en mémoire cache pour une utilisation ultérieure afin d'améliorer les temps de réponse. L'état du répartiteur et sa liste d'actions ne sont pas réinitialisés entre deux requêtes. Si vous activez ou désactivez des éléments d'action en cours d'exécution, vous obtiendrez des résultats imprévisibles lorsque ce module sera utilisé pour les requêtes client suivantes.

 

Bien que la gestion du treading ait été revue et améliorée dans Delphi 6 et 7, le principe reste valable. Dans la pratique, l'objet TwebRequestHandler, ancêtre de l'objet TisapiApplication, vérifie d'abord la disponibilité d'une ancienne instance dans la Tlist FinactiveWebModules. Si une instance, préalablement créé et utilisée est disponible, il l'affecte et l'utilise comme l'instance courante (voir la portion de code ci-dessous).

// Ces lignes sont tirées de la VCL, elles expliquent le mode
// de fonctionnement des webmodules..

if FInactiveWebModules.Count > 0 then begin Result := FInactiveWebModules[0]; Result.OnModuleAdded := nil; FInactiveWebModules.Delete(0); FActiveWebModules.Add(Result); End

Vous récupérez donc un WebModule ayant déjà servi.

Si la requête Web précédente à utilisé une requête de base de données, ou affectée une variable déclarée dans le WebModule, vous récupérez les valeurs de ces dernières alors même que le contexte de la requête peut-être complètement différent et nécessiter d'autres valeurs.

Autre inconvénient du principe, les événements OnCreate et OnDestroy du WebModule ne sont pas appelés systématiquement. Cet inconvénient, pour ceux qui ne le savent pas, peut devenir un avantage pour les personnes informées, en ce sens que la gestion des Threads proposée par TwebRequestHandler accélère les traitement en gérant une file d'objet disponibles sans besoin de les recréer.

Toutefois, dans ce cas la, il est impératif que tous les objets et variables dont le résultat est susceptible de changer soient créés et/ou déclarés dans le corps de l'action.

Evitez de déclarer des variables dans le webModule.

Refermez toujours les requêtes utilisées, mieux créez les et libérez les dans l'action.

Une autre méthode consiste à affecter False à la variable CacheConnections dans le corps de la méthode OnCreate.

Application.CacheConnections := False;

Dans ce cas, un WebModule est crée et détruit à chaque action, ce qui consomme plus de ressources mais qui sécurise vos applications si vous avez malgré tout besoin de variables déclarées dans le WebModule. Si vous envisagez de partager une connexion de base de données entre les différentes instances de la DLL, créez une unité indépendante, initialisez la connexion dans une section INITIALIZATION en n'oubliant pas le pendant FINALIZATION et incluez l'unité par une clause Uses dans votre projet.

Notez cependant que du fait de l'environnement multi Thread, vous ne devez pas appeler de méthodes dans cette unité, sauf à bien connaître les environnements multi threading et à coder les protections nécessaires.

Le but de ce didacticiel est désormais atteint, vous connaissez le minimum requis pour créez votre première DLL ISAPI. Nous vous conseillons vivement de compléter ces informations par le tutorial de
Jean-Pierre Lamon disponible sur http://www.jpLamon.com

Tutoriels   Suite


Delphicenter est un service proposé par Cotelem™. 1997-2008