以下代码导致我们的Visual Studio 2012开发Web服务器或备用IISexpress通过在线程池中的所有组成线程中执行Thread.Abort
来有效地杀死WebApp的AppDomain。我不明白为什么?我找不到任何记录,具体说明在什么情况下Web服务器会这样做。而且," verbose" Web服务器本身的输出。
这需要花费几天的时间来追踪。正常的调试技术证明是没有价值我最终不得不求助于经过试验和测试的评论方法体的方法,直到我达到那个"啊-ha"时刻。
我们的一位开发人员无意中创建了一个临时文件,然后在我们的一个ASP.NET服务中再次关闭它。
FileStream fs = File.Create(strFilePath);
|
fs.Close;
strFilePath
被意外设置为与WebApp的程序集位置相同的位置。即:
var basePathUri = new Uri(Assembly.GetExecutingAssembly().CodeBase);
var strFilePath = Path.GetDirectoryName(Uri.UnescapeDataString(basePathUri.AbsolutePath));
值得一提的是,现在可以通过正确写入系统临时文件空间来纠正此错误。
所以,再一次,我们知道这是不好的做法,但为什么Visual Studio Web服务器的行为与它一样?
PS 我知道在将所有内容复制到临时ASP.NET位置时,开发Web服务器和生产Web服务器(例如apache或nginx)之间存在部署差异。实际上,这个问题并没有在部署中体现出来。