ContextSwitchDeadlock при запуске модульных (интеграционных) тестов - PullRequest
0 голосов
/ 28 августа 2009

При выполнении теста мы получаем следующую ошибку:

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.

Тест выполняет WCF-вызов метода на уровне сервиса, который получает данные из базы данных с использованием Entity Framework. Данные также кэшируются на стороне сервера с помощью блока приложения кэширования EntLib.

Тест, который проверяет один и тот же код на стороне сервера, проходит без ошибок.

1 Ответ

1 голос
/ 29 августа 2009

Нашел проблему.

Мы неправильно закрывали прокси WCF. Мы использовали «использование» вместо try catch с close или abort.

Таким образом, ошибка в одном тесте может вызвать ContextSwitchDeadlock в последующем тесте, который пытался использовать ту же службу WCF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...