ASP.NET应用程序(始终运行)在发布时关闭应用程序池

时间:2017-09-05 22:08:13

标签: asp.net-mvc-5 appfabric hangfire

我在这里遵循了这个指南:ShowInDisplayForm

但是,当我将我的Web应用程序发布到IIS 8.5时,它会关闭应用程序池,并且我的事件查看器会显示以下消息:

There was an error during processing of the managed application service 
auto-start for configuration path: 
'MACHINE/WEBROOT/APPHOST/mydomain.co.uk/'. The error message returned is: 
'An initialization error occurred while trying to preload an application.

Exception: System.InvalidOperationException

Message: Well known object of type 'System.Web.Hosting.PreloadHost' already 
exists in this App Domain.

StackTrace:    at 
System.Web.Hosting.HostingEnvironment.CreateWellKnownObjectInstance(String 
assemblyQualifiedName, Boolean failIfExists)
at 
System.Web.Hosting.HostingEnvironment.CreateWellKnownObjectInstance(String 
assemblyQualifiedName, Boolean failIfExists)
at System.Web.Hosting.ApplicationManager.CreateObjectInternal(String appId, 
Type type, IApplicationHost appHost, Boolean failIfExists, 
HostingEnvironmentParameters hostingParameters)
at System.Web.Hosting.ProcessHost.PreloadApplicationIfRequired(String appId, 
IApplicationHost appHostParameter, HostingEnvironmentParameters 
hostingParameters, LockableAppDomainContext ac)
at System.Web.Hosting.ProcessHost.<>c__DisplayClass38_0.
<PreloadApplicationIfNotShuttingdown>b__0(Object o)'.  The worker process will 
be marked unhealthy and be shutdown.  The data field contains the error code.

我无法解决这个问题,或者找出从哪里开始调试它。如果我之后手动启动应用程序池一切正常 -  它真的很烦人。任何建议表示赞赏。

3 个答案:

答案 0 :(得分:1)

AHHHH。我找到了解决方案(好吧......无论如何,它对我有用)。这要归功于这篇伟大的文章:https://weblog.west-wind.com/posts/2013/oct/02/use-iis-application-initialization-for-keeping-aspnet-apps-alive

特别是,上面的Hangfire教程中没有提到的是需要:

  • 添加应用程序初始化&#39;角色。在IIS 8.5上,它与链接文章的位置略有不同。它位于:Web服务器(IIS)&gt; Web服务器&gt;应用程序开发&gt;申请初始化

  • 此外,我还需要确保启用“预加载”功能。国旗已经设定,其中没有。为此我在IIS中突出显示了我的网站,点击了“高级设置”&#39;在右侧面板中,将其设置在那里。

然后我尝试再次发布我的网站瞧....没有HTTP错误503!

<强>更新

这不是解决方案。它工作的唯一原因是因为我附加了调试器(DebugDiag),这似乎使它因某些原因而起作用!一旦我分离调试器,我就会得到同样的错误。

答案 1 :(得分:0)

选择的答案帮助了我。如果其他人遇到其他麻烦,结果我也没有在我的机器上安装正确版本的.NET;我的应用程序针对4.7,最新的我是4.5。安装完成后,一切正常。

答案 2 :(得分:0)

我将应用程序池上的快速故障保护最大故障数增加到20个左右。我不确定这是否是解决问题的最佳方法。

  1. IIS管理器
  2. 应用程序池
  3. 选择应用程序池
  4. 高级设置
  5. 向下滚动到快速故障保护
    • 最大失败次数-我将其更改为20
  6. 确定