La création d'objets COM pour ASP

Jean-Michel Doudoux

- Titre : La création d'objets COM pour ASP

- Auteur : Jean-Michel Doudoux

- Parution : 6 novembre 2003

- Mise à jour : 24 décembre 2019

- Licence : Copyright ® 2003 J.M.Doudoux. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- Avant-propos

- I. La création d'un objet COM ASP

- II. L'éditeur de bibliothèque de type

- III. Le premier test

- IV. Enrichissement et débogage

- IV-A. L'ajout d'une nouvelle méthode à l'objet

- IV-B. L'ajout d'un nouvel objet dans la bibliothèque

- IV-C. Le débogage grâce à COM+

- V. L'accès aux objets de la page ASP

- V-A. La propriété Request

- V-B. La propriété Response

- V-C. La propriété Session

- VI. L'accès à une base de données dans un objet ASP

Avant-propos

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 œuvre 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éveloppement 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.

I - 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éé.

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 conservées. Seul le nom de CoClasse doit être renseigné, par exemple testComASP.

L'assistant crée 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).

II - 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'événement 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 ci-dessous 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 ci-dessous 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;

III - 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 « Éxécuter/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 des services Internet (menu démarrer / Programmes / outils d'administration / gestionnaire des services Internet). Il faut sélectionner le site et utiliser l'option propriétés du menu contextuel.

IV - Enrichissement et débogage

Le développement de ce type de composant est long et nécessite de nombreux tests.

Si l'on modifie 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 verrouillée par IIS et plus exactement par le module d'administration. Pour déverrouiller 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.

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 à 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.

IV-A - L'ajout d'une nouvelle méthode à l'objet

Pour réafficher la 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 ci-dessous dans la barre d'outils puis de suivre les mêmes opérations que pour l'ajout de la première méthode.

IV-B - 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 structure de la bibliothèque :

- arrêt et relance des services Internet ;

- recompilation de la bibliothèque ;

- annuler le recensement de la bibliothèque : menu Éxecuter / Re-recenser le serveur activeX ou utiliser la commande DOS regsvr32 /u suivi du chemin absolu de la dll

- recenser la bibliothèque : menu Éxecuter / 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

IV-C - Le débogage grâce à COM+

L'arrêt des services Internet à chaque test peut convenir pour le développement d'objets très simples, mais toutes ces actions sont longues et fastidieuses surtout dans la phase de développement et de débogage 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 débogueur de l'IDE et l'arrêt du service d'administration et du serveur 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 « Éxécuter/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 de saisir le nom de l'application et éventuellement une description.

Si l'on tente de valider l'application COM+ sans que tous les objets soient associés à l'application, le message d'erreur suivant apparait :

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 cet identifiant dans le presse-papier.

Dans l'IDE Delphi, sélectionner l'option « Éxecuter / 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 boîte de dialogue « Service de composants », arrêter 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 à déboguer.

Afficher la page web qui appelle le composant. Si l'exécution passe sur le point d'arrêt, l'exécution s'arrête et il est possible de déboguer le code comme on le ferait pour une application classique.

Pour arrêter l'exécution, faire des modifications et recompiler la DLL, il suffit 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'exécution dans Delphi. Les modifications peuvent être faites et il suffit de recompiler et de relancer l'exécution en appuyant sur F9 puis de réafficher la page asp dans un browser.

Si le code s'exécute sans arrêt sur les points d'arrêt, il faut vérifier que l'option « Ouvrir dans le débogueur » est cochée dans l'onglet « Avancé » des propriétés de l'application COM+ et que le chemin du débogueur est bien celui de Delphi.

V - 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.

V-A - 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'];

V-B - 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ée.

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 le contenu généré est mis dans un tampon avant d'être envoyé.

V-C - La propriété Session

Cette propriété permet d'avoir accès à l'objet session de la page ASP.

Session['login'] := login;

VI - 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 la libération dans la méthode OnEndPage :

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;