2009-08-28 2 views
0

をテストする場合:ContextSwitchDeadlock実行されているユニット(統合が)テストで動作しているとき、私たちは、次のエラーを取得する

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. 

テストはEntity Frameworkのを使用してデータベースからデータを取得し、サービス層上のメソッドへのWCF呼び出しを行います。 EntLib Caching Application Blockを使用して、データもサーバー側でキャッシュされます。

サーバー側で同じコードをテストするテストでエラーが発生しなくなります。

答えて

1

問題が見つかりました。

私たちは正しくWCFプロキシを閉じていませんでした。私たちはクローズまたはアボートでtry catchの代わりに "using"を使用していました。

したがって、1回のテストでエラーが発生すると、同じWCFサービスを使用しようとした後続のテストでContextSwitchDeadlockが発生します。

関連する問題