J’ai créé un service Windows (un exe basé sur l’assistant Visual Studio ATL) qui expose une interface COM. Aucun problème lors de l’exécution en tant que serveur In-Proc ou Windows. J’ai besoin d’un service Windows car certains processus doivent être disponibles en dehors des access IIS.
J’ai créé des pages Web (aspx / C #) appelant mon service et tout a bien fonctionné dans Visual Server .NET Development Server. J’essaie maintenant de pousser les pages Web vers IIS 7 (exécuté sur Windows 7) pour des tests supplémentaires. Mais, lorsque les pages sont exécutées sous IIS, les appels à mon interface COM échouent tous avec l’erreur
“La récupération de la fabrique de classes COM pour le composant a échoué en raison de l’erreur suivante: 80070005 L’access est refusé. (Exception de HRESULT: 0x80070005 (E_ACCESSDENIED)).”
J’ai vérifié que le service est:
Des idées pourquoi cela ne fonctionnerait pas? Quelque chose à voir avec les interfaces COM contenues dans un fichier exe vs dll?
Des possibilités d’IIS appelant une interface COM exposée dans un service Windows?
Je pense que vous devez autoriser l’access au processus du pool d’applications de votre site pour utiliser votre object COM, sous Config DCOM.
S’il vous plaît laissez-nous savoir si cela résout votre problème.
Incidemment:
> is a 64bit exe (so should load in the default IIS app-pool space)
Ce n’est pas tout à fait vrai. Le pool d’applications est un processus contrôlé par ISS. Quel que soit le processus, votre service s’exécute indépendamment. Votre service n’a donc rien à voir avec les pools d’applications IIS.
Cela ressemble beaucoup à un problème de sécurité / permissions – assurez-vous d’abord que l’utilisateur sous lequel IIS s’exécute dispose de droits suffisants et vérifie en particulier que votre groupe ASPNET est autorisé à utiliser COM (je pense que ce n’est pas le cas par défaut) .
EDIT – après avoir posté cela, j’ai trouvé un autre message qui pourrait aider – jetez un oeil ici
Merci les gars. J’apprécie vraiment vos réponses. Votre information m’a orienté dans la bonne direction. Le problème était en effet un problème de sécurité \ permissions. Pour aggraver le problème, à chaque fois que je reconstruis mon service, les droits que j’ai définis pour IIS_IUSRS ont été supprimés de l’exécutable. Donc, si vous commencez à voir des erreurs intermittentes accéder à votre object COM pendant le développement, vérifiez les droits sur votre exe après les re-builds! J’espère que cela aide les autres.
Pour terminer, voici comment j’ai résolu le problème: