应用程序池上的Asp.net 3.5白屏在IIS 6.0上回收

时间:2014-06-16 20:21:29

标签: c# asp.net iis-6 windows-server-2003 application-pool

背景:

我有一个用.Net 3.5(2.0 CLR)编写的旧ASP.NET应用程序在32位Windows 2003服务器上运行,该服务器上有IIS-6。我们最近不得不改变一些数据访问层部分,以便将来进行一些更改,然后从TFS部署它。我们最近进行了其他小调整的部署,并且msbuild文件与目标完全相同,因此除了一些编码之外没有其他更改。

问题:

当代码审查和提交编码更改时,我启动了一个成功的部署。我在开发服务器上打开了网站进行一些现场检查,然后将其交给测试人员开始进行更彻底的回归测试,一切看起来都很棒 - 没问题。

一个小时左右,当他们开始测试时,我得到一张网站只是一个白色屏幕的门票,甚至没有任何东西甚至从网络服务器回来作为页面的来源。事件查看器中的服务器上的任何日志中都没有显示任何内容,除了成功的页面请求之外,IIS日志中没有任何内容,请尝试其他一些操作。

所以,我再次从TFS部署网站,它加载得很好,我可以完美地执行很多操作,而不会看到白屏。日志看起来很好,所以我认为它是一个侥幸,继续我的任务。

然后机票又回来了,再次这样做了,死亡的白屏,我完全不知道为什么。

到目前为止的故障排除:

  1. 自动和手动部署后,网站的初始加载工作正常。
  2. 从[1]开始在工作部署后回收应用程序池后发生故障。
  3. Fiddler在服务器和客户端之间没有发现任何奇怪的事情。
  4. 将网站从2.0切换到4.0(我们的下一次升级)具有相同的效果。
  5. 从[4]中的相应框架的“Temporary ASP.NET Files”文件夹中删除所有文件确实将其恢复为[1]的状态,但是不希望清除应用程序池回收之间的文件,因为它不是其他应用需要。
  6. 我已尝试使用debug进行标记,并将两个标志设置为true和false,结果相同。
  7. 将msbuild文件和solution / project / web.config设置与已经过此升级但没有差异的其他应用程序进行比较。
  8. 调查结果:

    问题似乎是来自最后一个“实时”应用程序池的前一个程序集仍保留在“Temporary ASP.NET Files”目录中,并且该文件具有完全相同的名称,只是附加了“.delete” (即assemblyname.dll.delete)。这只是在每个应用程序池重新启动时循环。

    所以,对于第一次运行,网站的dll将在那里,一切都会有效。可以说它是MyApplication_0001.dll。

    在第二次运行时,MyApplication_0001.dll,MyApplication_0001.dll.delete和MyApplication_0002.dll将在那里。

    第三次运行MyApplication002.dll,MyApplication002.dll.delete和MyApplication003.dll。

    因此,模式是它保留最后一个,具有相同名称的空.delete文件和新的dll。

    如果我删除了额外的文件,该网站将立即回来,因此运行时必须看到两个相同的命名空间/类/签名,并且无法找出哪个是正确的和阻塞 - 只是没有任何错误记录

    有关要在应用程序/ iis /服务器级别进行配置检查的事项的任何想法吗?

    更新

    2014-06-24 :确认这种情况发生在Windows 7 PC以及IIS 7.5在64位框架中的经典应用程序池上运行.Net 2.0。

    问题答案:

    1. 对于NTLM,初始HTTP响应为401,然后我得到一个200,在验证后返回白屏。
    2. 在各种浏览器和版本的服务器和所有开发人员/测试人员计算机上返回白色屏幕。

0 个答案:

没有答案