簡體   English   中英

在加載網頁或發出SignalR請求之前,不會啟動WebApi Application_Start

[英]WebApi Application_Start will not fire until web page is loaded or SignalR request is made

我有WebApi OWIN托管的Web服務器/ Winforms客戶端應用程序。

另外,我正在使用SignalR進行客戶端/服務器通信。

在Global.asax.cs中調試Application_Start方法的同時在IIS Express下運行時,可以很好地執行。

在IIS 7.5上,當在IIS管理器中啟動網站時,Global.asax.cs中的相同代碼將不會執行

僅當我從http:// localhost:7000 / SignalR / hubs頁面調用該應用程序時,或在該服務器代碼正常運行前后,客戶端第一次發送SignalR請求時,才會觸發Application_Start。

我可以通過客戶端第一次發送請求時發送請求來添加代碼以“預熱”服務器,但我想避免這種情況。

在Global.asax.cs中調試Application_Start方法的同時在IIS Express下運行時,可以很好地執行。

這是因為用VS啟動應用程序會自動打開瀏覽並執行第一個請求。 因此服務器通過您通過VS的動作間接接收到它的第一個請求。

僅當我從http:// localhost:7000 / SignalR / hubs頁面調用該應用程序時,或在該服務器代碼正常運行前后,客戶端第一次發送SignalR請求時,才會觸發Application_Start。

這是默認配置。 收到第一個請求時,將執行Application_Start事件。 但是您可以通過web.config中的配置來更改它。 因此,您必須使用Microsoft解釋的<applicationInitialization>元素:

<applicationInitialization>元素指定在接收請求之前主動執行Web應用程序初始化。 如果在接收到HTTP請求之前執行了初始化序列(例如初始化連接,初始化內存中的緩存,運行查詢和編譯頁面代碼),則應用程序可以更快地啟動。

在不預熱服務器的情況下,您需要轉移到更高版本的IIS。 所需的最低版本是IIS8。上面添加的文檔鏈接說明了如何激活此功能。

如果您認為初始化過程很耗時(緩存初始化等...),則此配置元素還允許您配置靜態頁面或啟動畫面,這些頁面將顯示出來,直到初始化完成為止。 為此,您可以在<applicationInitialization>上使用remapManagedRequestsTo屬性。

因此,最終您的配置應在web.config中如下所示:

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

有關更多信息,請不要忘記單擊我之前添加的文檔鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM