【问题标题】:WebApi Application_Start will not fire until web page is loaded or SignalR request is madeWebApi Application_Start 在网页加载或 SignalR 请求发出之前不会触发
【发布时间】:2018-10-25 14:14:21
【问题描述】:

我有 WebApi OWIN 托管的 Web 服务器/Winforms 客户端应用程序。

此外,我正在使用 SignalR 进行客户端/服务器通信。

在 IIS Express 下运行时,在 Global.asax.cs 中调试 Application_Start 方法时执行得很好。

在 IIS 7.5 上,当网站在 IIS 管理器中启动时,Global.asax.cs 中的相同代码将不会执行

Application_Start 仅在我从页面 http://localhost:7000/SignalR/hubs 调用它或客户端第一次发送 SignalR 请求并且在该服务器代码正确运行之后触发。

我可以添加代码来“预热”我的服务器,方法是在客户端第一次发送请求时发送请求,但我想避免它。

【问题讨论】:

  • 在 Windows 7 Professional 中,我下载并安装了适用于 IIS 7.5 的应用程序初始化模块初始化。在配置编辑器 applicationHost.config 中编辑以将 startMode="AlwaysRunning" 和 preloadEnabled="true" 以及 添加到我的 Web.config 这些都不起作用。

标签: c# signalr iis-7.5 asp.net-core-webapi


【解决方案1】:

在 IIS Express 下运行时调试 Application_Start Global.asax.cs 中的方法执行得很好。

那是因为使用 VS 启动您的应用程序会自动打开执行第一个请求的浏览器。所以服务器通过 VS 间接接收到它的第一个请求。

Application_Start 仅在我从页面调用它时触发 http://localhost:7000/SignalR/hubs 或客户端发送 SignalR 请求 第一次和之后该服务器代码正确运行。

这是默认配置。 Application_Start 事件在收到第一个请求时执行。但是您可以通过 web.config 中的配置来更改它。所以你必须使用<applicationInitialization>元素,正如Microsoft所解释的那样:

<applicationInitialization> 元素指定 Web 应用程序 在收到请求之前主动执行初始化。 如果初始化序列,应用程序可以更快地启动 例如初始化连接、启动内存缓存、运行 查询和编译页面代码在 HTTP 请求之前执行 收到了。

顺便说一句,要在不预热服务器的情况下进行此操作,您需要迁移到更高版本的 IIS。所需的最低版本是 IIS 8。上面添加的文档链接说明了如何激活此功能。

如果您认为您的初始化过程可能很耗时(缓存初始化等...),此配置元素还允许您配置静态页面或闪屏,以供在初始化完成之前使用。为此,您使用<applicationInitialization> 上的remapManagedRequestsTo 属性。

所以最后你的配置在你的 web.config 中应该是这样的:

<system.webServer>
   <applicationInitialization
      doAppInitAfterRestart="true"
      skipManagedModules="true"
      remapManagedRequestsTo="path_to_your_static_file_to _show">
   </applicationInitialization>
</system.webServer>

要了解更多信息,别忘了点击我之前添加的文档链接。

【讨论】:

  • 我在 IIS 7.5 上,暂时无法升级。我已经下载并安装了 IIS 7.5 的自动预热模块并按照说明操作,但是 不起作用。有没有另一种方法可以预热服务器。此处提到了自动预热模块:docs.microsoft.com/en-s/aspnet/whitepapers/aspnet4/overview
  • 效果很好!
猜你喜欢
  • 1970-01-01
  • 2014-08-27
  • 2013-11-04
  • 2023-03-24
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多