Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Langages serveur > ASP
ASP Forum sur la programmation ASP. Avant de poster : Cours ASP, FAQ ASP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/02/2008, 18h46   #1
Invité de passage
 
Inscription : février 2003
Messages : 11
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 11
Points : 2
Points : 2
Par défaut Composant COM sur achitecture n-tier

Salut à tous,
J'ai un composant COM qui est utilisé pour générer un code barre, mais l'important n'est pas vraiment au niveau de sa fonctionnalité car je recontre plutôt un problème d'architecture, je m'explique.

Mon composant est enregistré sur le serveur A, sur lequel je l'ai créé en tant que package, dans les services de composants windows afin de pouvoir l'instancier de manière distante. Pour ce faire, j'ai dû l'exporter en tant que package .msi.

J'ai un serveur B, sur lequel tourne une application web, géré par IIS où le composant COM est instancié depuis une page asp par Server.CreateOject ... En réalité j'ai simplement installé le package .msi sur le serveur B, ce qui a créé une classe proxy qui me permet d'instancier le composant, comme s'il était local.

Si je teste l'appel du composant depuis le server B, simplement en testant la page asp de mon application, le composant est bien instancié de manière distante, je suppose que mon IIS sur le serveur B devient alors client sur server A, lequel créé l'objet localement puis le renvoit à IIS qui le renvoit à IE.

Jusque là tout fonctionne bien. Maintenant, si j'essaie de tester l'application depuis une autre machine, disons client C, c'est-a-dire j'ouvre un IE sur client C, je browse l'URL de mon site sur le server B, je teste la page qui est censé instancier le composant COM, cela ne fonctionne plus (le barcode est affiché normalement dans une balise img, elle est simplement vide!).

Je pensais au départ que c'était un probleme de droit (l'application asp utilise l'authentification windows et le composant COM aussi), mais j'ai tout essayé en utilsant des comptes Guest en accordant toutes les permissions possibles mais cela n'a rien changé, cela fonctionne uniquement si je teste le composant depuis server B.

Quelqu'un aurait-il une idée ?
Merci d'avance de votre aide.
inluvwitiou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2008, 00h33   #2
Expert Confirmé Sénior

 
Avatar de Immobilis
 
Inscription : mars 2004
Messages : 5 862
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 5 862
Points : 5 982
Points : 5 982
Salut,

Bienvenu sur le forum. C'est bizarre comme histoire. Ni B ni C ne devraient avoir un comportement différent.

Et si tu installe ton msi sur C?

A+
Immobilis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2008, 08h18   #3
Invité de passage
 
Inscription : février 2003
Messages : 11
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 11
Points : 2
Points : 2
Salut Immobilis,
Merci pour ton intervention. Et bien je ne l'ai pas essayé mais cela n'aurait pas trop de sens de faire ainsi car C est le client donc pourrait, par conséquent, être n'importe quel poste utilisateur. Je ne m'imagine pas installer le package sur chaque sur chaque poste tu vois ?
Je vais essayer tout de meme, mais si cela resou le problème alors je n'ai rien compris au principe du client server
inluvwitiou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2008, 14h46   #4
Invité de passage
 
Inscription : février 2003
Messages : 11
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 11
Points : 2
Points : 2
Ouf, quel soulagement, après plusieurs jours passés à chercher, j'ai enfin pu trouver d'ou provenait l'erreur. En réalité ce n'était pas un bug, mais c'était bien lié à un problème de sécurité.
Voici l'approche que j'ai utilisée afin de m'en sortir :

- Comme expliqué plus haut, le barcode généré par le composant COM, est encapsulé dans une page asp (simplement par un Server.CreateObject puis en appelant les méthodes de l'objet...), laquelle est insérée dans une balise
<img src="generebarcode.asp..."/>. En testant la page donc, l'image était tout simplement vide. J'ai donc enlevé la balise <img> et appelé generebarcode.asp directement et là, j'ai reçu l'erreur "Access denied on Server.CreateObject etc etc..."

- J'ai contrôlé ensuite les évènements de sécurité de server A et là j'ai vu que le compte "Anonymous Logon" était utilisé pour un process COM. Bien que l'ayant ajouté au niveau du répertoire windows où se trouve la dll et y avoir granté toutes les permissions possibles, cela ne fontionnait toujours pas.
En réalité, il faut aller dans les "Local Security Policy" du server qui héberge le composant, dans mon cas, server A, éditer la policy "DCOM : Machine Launch restriction...", y ajouter le compte qui se connecte au server pour les objets COM, dans mon cas le "Anonymous Logon" et lui accorder les permissions local et remote

Merci à un utilisateur qui avait été confronté à plus moins le même cas et a détaillé sa démarche de manière encore plus exhaustive ici http://www.computerperformance.co.uk/Logon/code/code_80070005.htm

Par contre, je ne sais pas pourquoi ce compte anonyme est utilisé lorsque client C appelle server B qui se connecte a server A car à aucune place je n'ai spécifié ce compte. Mais bon la ça marche et c'est le principal !
inluvwitiou est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h51.


 
 
 
 
Partenaires

Hébergement Web