簡體   English   中英

asp.net 內核中的控制台應用程序和 Web 應用程序之間的區別

[英]Difference between a console application and Web application in asp.net core

我正在嘗試運行一個后台服務,它只在指定的時間間隔內寫入文件。
我嘗試了兩種方法
1) 使用控制台應用程序模板創建項目
2) 以 Web Application 為模板創建項目

當我從 Visual Studio 運行應用程序時,它們都運行良好。 但是當我將它們部署到 IIS 時,只有 web 應用程序版本有效。 需要注意的是,這兩個項目的代碼絕對沒有區別。 我在兩個項目中都使用了 WebHost 作為托管策略,並在控制台應用程序的情況下安裝了所有依賴項,就像在 Web 應用程序版本中一樣。

我還必須通知我在 IIS 中使用了 preloadEnabled="true" 選項,因為 IIS 需要 web 請求來啟動應用程序。

我想知道兩種項目類型之間有什么區別,因為代碼是相同的? 我不想要 Web 應用程序模板。

編輯 1:我忘了提到該服務還需要公開一個 api 端點以進行健康檢查。 windows 服務方法會監聽 http 請求嗎?

我使用以下文章來實現我的后台服務。 https://docs.microsoft.com/en-us/dotnet/architecture/microservices/multi-container-microservice-net-applications/background-tasks-with-ihostedservice

經過多年構建后台服務,我了解到 Windows 服務是實現這類應用程序的最佳工具。 有許多方法可以讓 IIS 應用程序在后台啟動和運行,並防止其被回收。 盡管如此,在實踐中,IIS 上的應用程序並不意味着永遠執行。

If you had an intention to build your app in the cloud, I would have suggested using something like Azure WebJobs or Azure Functions Timer-Triggered functions, but for on-premise, even using something like Hangfire in the web is not sustainable. 當您需要在沒有“應用程序初始化”模塊的 Windows 服務器上向后兼容時,最糟糕的情況就會發生。

我的建議是,如果您可以控制您的環境,請嘗試將您的應用程序移動到一個簡單的 Windows 服務。 Windows 服務消耗更少的 memory,更易於管理,並且可以永遠運行而無需回收。

WebApplications 顯然是錯誤的工具。

WebServer 始終在線且始終可訪問,是黑客攻擊的主要目標。 為了彌補這一點,它們通常在您可以想象的最嚴格的用戶權限下運行:對其程序和此實例內容目錄的讀取權限。 雖然我根本不知道它為什么起作用,但它可能會停止在生產中工作。

你想寫的是一個服務或由 Windows 任務調度器執行的東西。 我個人建議使用 Task Sheduler,因為服務有自己的一組限制。 除非有一些你沒有告訴我們的要求細節。

這篇文章可能會有所幫助。 這是關於如何將控制台應用程序轉換為 web 應用程序的分步教程。

暫無
暫無

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

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