2009-08-28 4 views
0

Nous obtenons l'erreur suivante lors de l'exécution à l'essai:teste ContextSwitchDeadlock lorsque l'unité en cours d'exécution (intégration)

ContextSwitchDeadlock was detected 
Message: The CLR has been unable to transition from COM context 0x344b0c0 to COM 
context 0x344b230 for 60 seconds. The thread that owns the destination context/apartment is 
most likely either doing a non pumping wait or processing a very long running operation 
without pumping Windows messages. This situation generally has a negative performance 
impact and may even lead to the application becoming non responsive or memory usage 
accumulating continually over time. To avoid this problem, all single threaded apartment 
(STA) threads should use pumping wait primitives (such as CoWaitForMultipleHandles) and 
routinely pump messages during long running operations. 

Le test fait un appel WCF à une méthode sur la couche de service qui reçoit les données de la base de données en utilisant Entity Framework . Les données sont également mises en cache sur le serveur à l'aide du bloc d'application EntLib Caching.

Le test qui teste le même code côté serveur passe sans erreur.

Répondre

1

a trouvé le problème.

Nous ne fermions pas correctement les proxies WCF. Nous utilisions "using" au lieu d'un try catch avec close ou abort. Par conséquent, une erreur dans un test provoquerait un ContextSwitchDeadlock dans un test ultérieur qui a essayé d'utiliser le même service WCF.

Questions connexes