2010-05-27 6 views
0

Je déplace actuellement un projet Web ASP.NET d'un environnement d'hébergement IIS 6 vers un environnement d'hébergement IIS 7. Tout semble être en cours d'exécution, sauf mes appels à un objet COM.Utilisation d'un objet COM dans IIS 7

Je peux parfaitement instancier un objet de type COM, mais lorsque j'appelle une de ses méthodes, IIS se bloque. Le journal des événements signale un code d'erreur "0xc0000374", ce qui indique une corruption de tas. Lorsque j'exécute l'application dans le serveur de développement de Visual Studio, tout se passe bien et le code de l'objet COM est exécuté sans erreur. C'est également le cas lorsque l'application est hébergée sur une machine IIS 6.

Je l'ai regardé à travers tous les paramètres de l'IIS 7 et n'ont pas trouvé quoi que ce soit configurable pour les objets COM, comme la sécurité ou ...

Je me bats avec pendant un certain temps et je suis d'idées . Est-ce que quelqu'un a déjà eu l'expérience du déploiement d'objets COM sur IIS 7?

Votre aide serait grandement appréciée!

+0

Le processus/pool d'applications IIS a-t-il accès au répertoire dans lequel se trouve la DLL COM réelle? – PatrickSteele

+0

Oui, je viens de doubler vérifié et essayé de donner à l'utilisateur de l'application tous les droits sur le dossier. Mais pas de changements. – w00ter

+0

L'étrange c'est en fait cela, l'objet COM est responsable de la génération d'un fichier image. Un fichier est généré avant que cet IIS se bloque. C'est peut-être un détail important ... – w00ter

Répondre

0

Ouf ... j'ai trouvé la solution !!

L'objet COM Delphi que j'utilise renvoyait une chaîne qui contient le chemin d'accès au fichier image généré. Parce que le code Delphi a donné cette chaîne comme résultat ou renvoyer une valeur pour les développeurs C#. La mémoire allouée pour cette variable était inaccessible pour mon code C#, ce qui a entraîné la corruption du tas ou le code d'erreur "0xc0000374". Je l'ai résolu en réécrivant le code Delphi pour accepter une variable "ref" pour le chemin du fichier, de sorte qu'il écrirait sur le même pointeur que la variable de chaîne que je crée en C#.

Heureusement pour mon retour, j'ai accès au code source d'objet COM ...

Je suis inspiré de l'article suivant:

http://blogs.msdn.com/b/asiatech/archive/2009/12/24/net-application-may-crash-on-windows-2008-when-calling-function-from-native-c-dll.aspx

J'espère que cela peut aider d'autres personnes dans la avenir.

0

Les objets COM doivent être enregistrés sur le serveur aussi loin que je me souvienne, en utilisant regsvr32 ou mieux encore en les ajoutant dans Panneau de configuration> Outils d'administration> Services de composants?

+0

Oui bien sûr, les objets COM sont enregistrés avec regsvr32. Sinon, courir à l'intérieur du serveur de développement de Visual Studio n'aurait pas fonctionné non plus. – w00ter