简体   繁体   English

运行单元(集成)测试时,ContextSwitch死锁

[英]ContextSwitchDeadlock when running unit (integration) tests

We get the following error when running at test: 在测试中运行时,我们收到以下错误:

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.

The test does a WCF call to a method on the service layer that gets data from the database using Entity Framework. 该测试对服务层上的方法进行WCF调用,该方法使用Entity Framework从数据库获取数据。 Data is also Cached on the server side using EntLib Caching Application Block. 还使用EntLib缓存应用程序块在服务器端缓存数据。

The test that tests the same code on the server side passes without error. 在服务器端测试相同代码的测试顺利通过。

Found the problem. 找到了问题。

We were not closing the WCF proxies correctly. 我们没有正确关闭WCF代理。 We were using "using" instead of a try catch with close or abort. 我们使用“ using”而不是close或abort的try catch。

Therefore, an error in one test would cause a ContextSwitchDeadlock in a subsequent test that tried to use the same WCF service. 因此,一个测试中的错误将在试图使用相同WCF服务的后续测试中导致ContextSwitchDeadlock。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM