1

我们偶尔会在我们的持续集成服务器 (TeamCity) 上收到此错误:

Unable to save config to file '...\web.config'.

这发生在不到 10% 的构建和不同的构建代理上,所以我认为这不是权限问题。

失败的测试调用写入另一个服务的 web.config 文件的 WCF 服务。它不是 THREAD-SAFE,但据我所知 TeamCity 不会并行运行测试,否则我们的许多其他测试将一直失败。

我试图通过产生大量调用配置服务的线程来重现错误并得到另一个异常:

The process cannot access the file '...\web.config' because it is being used 
by another process

谁能帮我找出问题的原因,这样我至少可以通过稳定的测试来重现它?

4

1 回答 1

0

web.config 上的文件锁定未及时释放。当测试 A 导致对 web.config 的写入时,不能保证在测试完成时 web.config 上的文件锁定将被释放。当测试 B 运行并尝试写入 web.config 时,锁可能仍然存在。这不太可能发生,因为锁通常会很快释放。但是,它确实偶尔会发生,这可能会导致您 10% 的失败率。

写入 web.config 时使用 try catch 块,并在发生异常时重试写入。这不是 100% 可靠的,因此您可能需要考虑自定义文件锁定。

于 2012-12-15T06:34:54.757 回答