我们最近升级到.Net 4.0,并为我们的应用程序编写了一个自定义的部署脚本,它使用Microsoft.Web.Administration库来执行诸如创build网站和设置应用程序池之类的事情。 我们开始testing开发者框中的代码,它似乎工作。 然后我们注意到,如果开发者重新构build应用程序,它将停止运行,IIS7会给我们这个(实际上是无用的)错误信息:
服务器应用程序不可用
您尝试在此Web服务器上访问的Web应用程序当前不可用。 请点击网页浏览器中的“刷新”button重试您的请求。
pipe理员注意:可以在Web服务器的应用程序事件日志中find详细描述此特定请求失败原因的错误消息。 请查看此日志条目,以发现导致此错误发生的原因。
如果我们手动回收应用程序池,应用程序将立即启动。 我们在应用程序日志中看不到任何事件或错误。 该池设置为自动启动并在configuration更改时回收。
我们已经尝试了应用程序池,应用程序和ASP.net设置中的各种设置组合。 我们已经尝试以不同的用户帐户运行应用程序池。 我们尝试删除应用程序池和应用程序,并通过用户界面手动重新创build,问题仍然存在。
这就好像使用Microsoft.Web.Administration库毒害机器,所以它永远不会自动重新启动应用程序池?
我们将不胜感激任何见解或debuggingbuild议。 我们不能在任何生产系统上运行这个,直到我们明白是什么导致了这种情况发生。
我在search完全相同的错误描述时发现这个线程。 我发现在我的情况下是什么原因造成的。
我正在将应用程序从.net 3.5转换到4.0,并将应用程序池从2.0更改为4.0后,启动。 它只发生在没有整合的经典模式下。
在我的情况下,我在web.config中有通配符http处理程序:
<add name="Wildcard .net 64 bit" path="*" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="None" preCondition="bitness64"/> <add name="Wildcard .net 32 bit" path="*" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="None" preCondition="bitness32"/>
但是我忘记了将path改为.net 4.0目录
所以在更改\v2.0.50727\aspnet_isapi.dll到\v4.0.30319\aspnet_isapi.dll ,网站开始正常运行。
希望这有助于某人。
你有没有机会打电话给Site.Stop()? 这确实将网站的autoStart属性更改为false,调用Start()会将其设置为true。
为了确保没有其他技巧,我build议将文件%windir%\ System32 \ Inetsrv \ Config \ ApplicationHost.config复制到某个备份目录,然后运行您的部署应用程序,然后在这之后对两个文件进行比较,然后查看差异,我的猜测是,你会看到一些autoStart属性设置为false。 如果是这种情况,那是因为调用Stop而不再调用Start(在CommitChanges之前)
检查以查看您的代码是否具有以下模式:Site.Stop()…在内存中执行更改…. ServerManager.CommitChanges()…. Site.Start()
您将永远不会将最后一个将其修改为“开始”的开始
不知道你是否已经通过这个,但是你不能在同一个应用程序池中混合使用.NET 4和.NET 2应用程序。 这个问题最近比较了我们。 我们必须创build一个新的应用程序池,并将新的.NET 4 Web应用程序分配给该池。 所有的.NET 2应用程序驻留在另一个。
那时,一切都很开心,你提到的信息就消失了。