Cette page est consultable pour des raisons historiques : elle n'est maheureusement plus maintenue faute de temps.
ASP permet d'utiliser des objets COM pour inclure des traitements qui produisent ou non du code HTML dans une DLL. Même si cette fonction est plus lourde à mettre en oeuvre que l'écriture d'une page ASP, elle permet de "cacher" le code de certains traitements et améliore les performances.
Delphi qui permet le développement d'objet COM propose une entité particulière avec un assistant pour le développpement d'objets utilisables avec ASP.
Les outils utilisés dans cette section sont :
- Delphi 7 entreprise
- IIS 5.0 sous Windows 200 Server
- Internet Explorer 6.0
La création d'un objet COM ASP
Il faut tout d'abord créer une nouvelle bibliothèque ActiveX en sélectionnant l'option du menu "Fichier / Nouveau / Autres".
Dans l'onglet ActiveX, cliquer sur l'icône "Bibliothèque ActiveX" puis sur le bouton "Ok"
Un nouveau projet est ainsi créer.
Il faut ensuite ajouter au projet, un objet "Objet Active Server" en sélectionnant l'option du menu "Fichier / Nouveau / Autres".
Dans l'onglet ActiveX, cliquer sur l'icône "Objet Active Server" puis sur le bouton "Ok"
Une boîte de dialogue permet de définir les fonctionnalités de base du nouvel objet.
Pour une utilisation dans IIS 5.0, les options par défaut peuvent être concervées. Seul le nom de CoClasse doit être renseigné, par exemple testComASP.
L'assistant créé un fichier tlb qui contient les caractéristiques de la bibliothèque, une nouvelle unité qui va contenir l'implémentation du code de l'objet et une page ASP basique pour tester le nouvel objet, puis il ouvre l'éditeur de bibliothèque de type. Cette boîte de dialogue est très importante car c'est avec elle que l'on va définir toutes les caractéristiques de la bibliothèque.
Il faut enregistrer les différents composants créés (Ctrl + shift + S).
L'éditeur de bibliothèque de type
Chacun des objets est défini par une interface, dans l'exemple ITestComASP. Par défaut, elle ne contient que les méthodes OnStartPage et OnEndPage si la case à cocher "Méthodes d'évenement niveau page" a été sélectionnée dans l'assistant.
Pour ajouter une méthode à un objet, il faut sélectionner l'interface puis utiliser le menu contextuel "Nouveau / méthode" ou cliquer sur le bouton dans la barre d'outils.
Il suffit de saisir le nom de la nouvelle méthode, par exemple afficherMessage.
L'onglet paramètre permet de préciser les paramètres en entrée et en sortie de la nouvelle méthode. Dans ce premier exemple, elle n'en possède pas donc il n'y a rien à faire.
Il faut mettre à jour le code dans l'unité qui implémente l'objet en cliquant sur le bouton de la barre d'outils.
Il faut saisir le code de la méthode.
procedure TtestComASP.afficherMessage;
begin
Response.write('<H1>test affichage d''un message</H1>');
end;
Le premier test
Il faut compiler les sources et générer la DLL en utilisant Ctrl + F9.
Il faut enregistrer la DLL dans le système en utilisant l'option"Executer/recenser le serveur ActiveX" du menu de Delphi.
Il faut modifier le fichier asp pour remplacer le nom de la bibliothèque "Projet2" par celui du nom du projet "testComASP" et remplacer le texte "{Insérez le nom de votre méthode ici}" par le nom de la méthode.
<HTML>
<BODY>
<TITLE> Test de Delphi ASP </TITLE>
<CENTER>
<H3> Vous devriez avoir le résultat de votre méthode Active Server Delphi ci-dessous </H3>
</CENTER>
<HR>
<% Set DelphiASPObj = Server.CreateObject("testComASP.testComASP")
DelphiASPObj.afficherMessage
%>
<HR>
</BODY>
</HTML>
Il faut ensuite copier ce fichier asp dans l'arborescence d'un site web défini dans IIS, par exemple dans le site web par défaut (c:\inetpub\wwwroot).
Il suffit enfin de saisir l'url de la page asp dans un browser, par exemple : http://192.168.25.101:8300/testComASP.asp
Pour connaitre le nom de domaine et le port du site, il faut utiliser le gestionnaire de service internet (menu démarrer / Programmes / outils d'administration / gestionnaire de service internet). Il faut selectionner le site et utiliser l'option propriétés du menu contextuel.
Enrichissement et debuggage
Le développement de ce type de composant est long et nécessite de nombreux tests.
Si l'on modifier la méthode afficherMessage pour afficher un second message par exemple, la recompilation de la DLL échoue avec le message : [Erreur fatale] Impossible de créer le fichier de sortie 'testComASP.dll'
En fait, la DLL est chargée et verouillée par IIS et plus exactement par le module d'administration. Pour déverouiller la DLL, il faut arrêter le module d'administration.
Le plus simple est de créer un petit fichier .bat qui réalise l'arrêt et la relance des services.
Exemple :
net stop "Service de publication World Wide Web"
net stop "Simple Mail Transfer Protocol (SMTP)"
net stop "Service de publication FTP"
net stop "Service ILS Site Server"
net stop "Service d'administration IIS"
net start "Service de publication World Wide Web"
net start "Simple Mail Transfer Protocol (SMTP)"
net start "Service de publication FTP"
net start "Service ILS Site Server"
Remarque : ce script est a adapter en fonction des services actifs sur la machine de test.
Ainsi la DLL peut être générée et écrite pour pouvoir de nouveau la tester.
L'ajout d'une nouvelle méthode à l'objet
Pour réafficher le boîte de dialogue "bibliothèque de type", il suffit de faire Ctrl + F12, de double cliquer sur le fichier se terminant par "_TLB" et d'appuyer sur F12.
Pour ajouter une nouvelle méthode à un objet, il faut sélectionner l'interface puis utiliser le menu contextuel "Nouveau / méthode" ou cliquer sur le bouton dans la barre d'outils puis de suivre les mêmes opérations que pour l'ajout de la première méthode.
L'ajout d'un nouvel objet dans la bibliothèque
Il est possible d'incorporer plusieurs objets dans la bibliothèque pour séparer les différentes fonctionnalités et faciliter la maintenance.
Il suffit de réitérer les opérations réalisées pour l'ajout du premier objet pour en ajouter un second.
Pour pouvoir utiliser ce nouvel objet, il faut informer le système du changement de la struture de la bibliothèque :
- arrêt et relance des services internet
- recompilation de la bibliothèque
- annuler le recensement de la bibliothèque : menu Executer / Re-recenser le serveur activeX ou utiliser la commande DOS regsvr32 /u suivi du chemin absolu de la dll
- recenser la bibliothèque : menu Executer / Recenser le serveur activeX ou utiliser la commande DOS regsvr32 suivi du chemin absolu de la dll
Si ces étapes ne sont pas réalisées, l'erreur suivante sera renvoyée lors d'une tentative de l'utilisation du nouvel objet:
Type d'erreur :
Objet Server, ASP 0177 (0x800401F3)
ProgID non valide Pour de plus amples informations relatives à ce message, veuillez visitez le site du Support technique en ligne Microsoft sur : http://www.microsoft.com/contentredirect.asp.
/testComASP.asp, line 10
Le debuggage grace à COM+
L'arrêt des services internet à chaque test peut convenir pour le développement d'objet très simple mais toutes ces actions sont longues et fastidieuses surtout dans la phase de développement et de debuggage d'un objet plus compliqué. Pour réellement simplifier les choses, il faut incorporer l'objet dans un composant COM+. De cette façon, il sera possible d'utiliser le debugger de l'IDE et l'arrêt du service d'administration et du server web sera inutile.
Il faut, pour commencer, annuler le recensement de la bibliothèque (arrêt et relance des services internet et de recensement de la bibliothèque (voir le paragraphe précédent)).
Il faut ensuite utiliser l'option "Executer / Installer des objets COM+" du menu de l'IDE.
Une boîte de dialogue apparait affichant la liste des objets de la bibliothèque.
Il faut cocher tous les objets et pour chacun préciser dans la boîte de dialogue l'application COM+ dans laquelle l'objet va être contenu. Il faut créer une nouvelle application pour le premier objet et ajouter les autres dans cette nouvelle application.
Pour créer une nouvelle application, il suffit simplement de saisir le nom de l'application et éventuellement une description.
Si l'on tente de valider l'application COM+ sans que tous les objet soit associer à l'application, le message d'erreur suivant apparaît :
Cette opération a créé une application COM+. Pour la visualiser, il faut utiliser le service de composants en sélectionnant le l'option "Menu démarrer / Programmes / Outils d'administration / Service de composants".
En déroulant l'arborescence, on retrouve l'application.
Il faut ensuite obtenir l'ID de l'application en la sélectionnant et en utilisant l'option propriétés du menu contextuel. Copier cette identifiant dans le presse papier.
Dans l'IDE Delphi, sélectionner l'option "Executer / Parametres" du menu principal. Dans la boîte de dialogue qui s'affiche :
- saisir ou sélectionner C:\WINNT\system32\DLLHOST.EXE dans "Application hôte"
- saisir "/ProcessID:" suivi de l'identifiant de l'application mis dans le presse papier
Cliquer sur "Ok"
Dans la boite de dialogue "Service de composants", arreter l'application COM+ en la sélectionnant et en utilisant l'option correspondante dans le menu contextuel.
Il faut modifier certains paramètres du projet en utilisant l'option "Projet / Option" du menu de Delphi.
Dans l'onglet compilateur, décocher la case Optimisation.
Dans l'onglet Lieur, cocher les cases "Informations de débogage TD32" et "Symboles de débogage distant".
Cliquer sur "Ok"
Il suffit de lancer l'application en appuyant sur F9. Il est alors possible de positionner un ou plusieurs points d'arrêts dans le code des objets à debugguer.
Afficher la page web qui appel le composant. Si l'éxécution passe sur le point d'arrêt, l'éxécution s'arrête et il est possible de debogguer le code comme on le ferait pour une application classique.
Pour arrêter l'éxécution, faire des modifications et recompiler la DLL, il suffit simplement d'arrêter l'application COM+ en utilisant l'option "Arrêter" du menu contextuel de l'application dans la boîte de dialogue "Service de composants".
Ceci arrête l'éxécution dans Delphi. Les modifications peuvent être faites et il suffit de recompiler et de relancer l'éxécution appuyant sur F9 puis de réafficher la page asp dans un browser.
Si le code s'éxécute sans arrêt sur les points d'arrêts, il faut vérifier que l'option "Ouvrir dans le débugueur" est coché dans l'onglet "Avancé" des propriétés de l'application COM+ et que le chemin du debugueur est bien celui de Delphi.
L'accès aux objets de la page ASP
Les objets ASP contenus dans la bibliothèque héritent de la classe TASPObject. Cette classe possède plusieurs propriétés qui permettent d'accéder aux objets de la page ASP :
- Request : accès à l'objet qui encapsule la requète
- Response : accès à l'objet qui encapsule la réponse
- Application : accès à l'objet qui encapsule les données de l'application
- Session : accès à l'objet qui encapsule la session
- Server : accès à l'objet Server
La propriété Request
Cette propriété permet d'avoir accès à l'objet request de la page ASP.
var
login : string;
begin
login := Request.Form['login'];
La propriété Response
Cette propriété permet d'avoir accès à l'objet response de la page ASP qui permet de modifier le contenu de la réponse.
La méthode la plus utilisée est la méthode write qui permet d'ajouter un contenu dans la page HTML généré.
Response.write('bonjour');
La méthode redirect permet de rediriger l'utilisateur vers une autre URL.
response.Redirect('/default.asp');
La méthode clear permet d'effacer le contenu de la réponse.
La propriété booléenne Buffer permet de préciser si la contenu généré est mis dans un tampon avant d'être envoyé.
La propriété Session
Cette propriété permet d'avoir accès à l'objet session de la page ASP.
Session['login'] := login;
L'accès à une base de données dans un objet ASP
Pour accéder à une base de données dans un objet ASP, il faut procéder comme dans une application normale en ajoutant une fiche de type DataModule.
La principale différence est que le développeur a la charge de créer et libérer les ressources de ce module. Ces deux opérations peuvent se faire de deux façons différentes :
- à la volée dans les méthodes qui en ont besoin
- la création dans la méthode OnStartPage et a liberation dans la méthode OnEndPage
Exemple : la classe du module de données est TDM
procedure TUtilisateur.OnEndPage;
begin
FDM.Free;
FDM:=nil;
inherited OnEndPage;
end;
procedure TUtilisateur.OnStartPage(const AScriptingContext: IUnknown);
begin
inherited OnStartPage(AScriptingContext);
FDM := TDM.create(nil);
end;