我们偶尔会在持续集成服务器(TeamCity)上收到此错误:
Unable to save config to file '...\web.config'.
这种情况发生在不到10%的构建版本和不同的构建代理程序中,因此我认为这不是权限问题。
失败的测试调用写入另一个服务的web.config文件的WCF服务。 它是 NOT THREAD-SAFE ,但据我所知,TeamCity不会并行运行测试,否则很多其他测试都会一直失败。
我尝试通过生成大量调用配置服务的线程来重现错误,并获得了另一个例外:
The process cannot access the file '...\web.config' because it is being used
by another process
任何人都可以帮我找到问题的原因,所以我至少可以通过稳定的测试来重现它吗?
答案 0 :(得分:0)
web.config上的文件锁未及时发布。当测试A导致写入web.config时,无法保证在测试完成时将释放web.config上的文件锁定。当测试B运行并尝试写入web.config时,锁可能仍然存在。它不太可能发生,因为锁通常很快释放。但是它偶尔会发生一次,这可能会导致你的失败率达到10%。
写入web.config时使用try catch块,并在发生异常时重试写入。这不是100%可靠,因此您可能需要考虑自定义文件锁定。