none
Charger une objet COM (ATL) dans WCF RRS feed

  • Question

  • Bonjour

    je reviens encore une fois sur mes objet COM!

    j'ai une application Silverlight WCF (.Net Framework 4.0), celle-ci interagit avec deux bases de données:

    1 - SQL Server avec Entity Framework

    1 - une base propriétaire (fichiers binaire) avec un objet COM (ATL)

    L'objet COM encapsule une DLL C/C++ Win32 et cette même DLL C/C++ encapsule une Lib static Fortran.

    j'ai développé un projet test qui fonctionne très bien (app Silverlight etun WCF) chargement de l'objet COM marche comme je le souhaite.

    mais quand je charge l'objet COM dans mon application là ou il faut que je l'utilise, j'ai une erreur

    La récupération de la fabrique de classes COM pour le composant avec le CLSID {BD6D8FA1-FDD1-44FD-B2E2-AFECFFCA864C} a échoué en raison de l'erreur suivante : 8007007f La procédure spécifiée est introuvable. (Exception de HRESULT : 0x8007007F).

    j'ai bien sur enregistré mon objet avec regsvr32, et la clé de la classe existe dans la base de registre


    Cordialement

    mercredi 19 février 2014 15:35

Réponses

  • Bonjour,

    ce n'est pas un problème de plateforme puisque le projet test et en 64bit, même si effectivement l'objet COM est en 32bit.

    J'ai finis par comprendre, il se trouve qu'il avait une dll du même nom que celle qui est encapsulée pas l'objet COM dans le répertoire du WCF, mais qui n'a pas les même points d'entrées. En claire, l'objet COM ne pointe pas vers la bonne dll.

    Pour revenir aux plateforme, je configure le Pool d'application de IIS pour qu'il accepte l'exécution des objets 32bit.

    Merci.


    Cordialement

    • Marqué comme réponse IghzerA jeudi 20 février 2014 09:44
    jeudi 20 février 2014 09:44

Toutes les réponses

  • Bonjour,

    L'erreur classique est l'utilisation d'un objet COM avec une application .NET qui s'exécute sur des architectures différentes (32 ou 64).

    Si votre composant COM est en 32-bit assurez vous que votre hôte qui héberge votre service WCF fonctionne en 32-bit. Les options de compilation se trouvent dans l'onglet "Compiler" des propriétés de projet.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    mercredi 19 février 2014 22:33
    Modérateur
  • Bonjour,

    ce n'est pas un problème de plateforme puisque le projet test et en 64bit, même si effectivement l'objet COM est en 32bit.

    J'ai finis par comprendre, il se trouve qu'il avait une dll du même nom que celle qui est encapsulée pas l'objet COM dans le répertoire du WCF, mais qui n'a pas les même points d'entrées. En claire, l'objet COM ne pointe pas vers la bonne dll.

    Pour revenir aux plateforme, je configure le Pool d'application de IIS pour qu'il accepte l'exécution des objets 32bit.

    Merci.


    Cordialement

    • Marqué comme réponse IghzerA jeudi 20 février 2014 09:44
    jeudi 20 février 2014 09:44