2009-01-21 10 views
0

J'ai un service Web VB.NET qui appelle un objet COM Interop. Lorsque je fais plusieurs appels au service Web en même temps, le service Web traite correctement jusqu'à ce qu'il appelle la première méthode de l'objet COM. À ce stade, il semble que les appels à l'objet COM soient placés sur une pile et qu'ils soient traités sur une base FIFO. Ainsi, chaque appel de service Web reste en attente jusqu'à ce que le précédent ait terminé son traitement. J'ai fait la même chose du côté de l'application de la console avant d'appeler une bibliothèque de classes qui utilise la bibliothèque COM et vous pouvez exécuter plusieurs applications console en utilisant le même objet COM Interop en même temps sans problème.Problème avec le service Web à l'aide de l'objet COM

Que dois-je faire pour que cela fonctionne correctement du côté des services Web? Les services Web ne doivent pas attendre qu'un COM se termine dans un précédent appel de service Web pour continuer le traitement.

+0

Après une enquête plus approfondie, j'ai découvert qu'il s'agit d'un problème avec le service Web fonctionnant dans l'appartement MTA et le COM est dans l'appartement STA. Cet article explique bien ... http://msdn.microsoft.com/en-us/magazine/cc163544.aspx. –

Répondre

1

Vos instances de console multiples sont chacune leur propre processus afin qu'ils obtiennent leur propre copie de l'objet COM. IIS et votre service Web sont en un seul processus. Vous serez donc soumis aux règles d'enfilage COM. Il se peut que l'objet COM que vous utilisez soit marqué avec un seul thread. Ou il implémente un pattern singleton de sorte qu'une seule copie existe par processus et qu'elle soit threadée. Quel que soit l'objet COM threadé apt, seul un thread peut y accéder à la fois.

Les règles autour de COM et thread sont assez complexes, l'objet COM que vous utilisez peut ne pas avoir été écrit pour fonctionner correctement sous IIS.

0

Bien sûr, je ne connais pas l'objet que vous traitez, mais juste une idée: est-il possible de faire des appels proxy à l'objet COM via une application COM +? De cette façon, vous pourriez être en mesure de définir le modèle de thread souhaité, aussi le rendre hors-processus (hébergé dans dllhost.exe), donc IIS n'aura pas à se battre avec lui comme serveur in-process

0

J'ai découvert qu'il y avait un problème avec le service Web fonctionnant dans l'appartement MTA et le COM est dans l'appartement STA. Cet article explique bien ... http://msdn.microsoft.com/en-us/magazine/cc163544.aspx et donne une solution, cependant, quand je l'implémente, il ne semble pas déplacer le service web vers l'appartement STA.

Questions connexes