簡體   English   中英

如何在IIS中托管Windows服務(如)

[英]How to host Windows Service (like) in IIS

如何在IIS中托管Windows服務並使該服務像在Windows上一樣運行? 我可以使用WCF服務中的某些功能嗎?

我無法訪問Windows本身,只能訪問IIS。 在該服務中,我將創建一個線程,該線程將在計划的時間處理一些數據。

簡而言之,你不能。

更詳細的答案是有兩個問題:

  1. IIS工作進程僅在HTTP請求進入時啟動。這意味着您無法使用系統啟動服務。
  2. IIS工作進程在多種情況下被回收(即重新啟動)。 例如,如果很長時間沒有HTTP請求進入,工作進程將重新啟動。 這意味着您無法控制何時關閉服務,除非您有權訪問應用程序池回收配置。 請記住,回收邏輯僅確保所有未完成的HTTP請求均已完成,但不等待所有后台線程完成。

您可以通過這種方式提供部分解決方案:

  1. 創建一個WCF服務方法,該方法檢查長時間運行的線程是否處於活動狀態,如果沒有,則啟動它。
  2. 創建一個非常簡單的 Windows服務,該服務會定期(每5秒一次)調用該方法。 將服務部署在某個地方,例如在您自己的計算機上。

唯一剩下的問題是:您真的需要避免使用Windows服務嗎? 您可以找到托管服務的地方嗎? 在某些情況下,Windows服務是最好的,甚至是唯一的方法。

你不能,堅果殼里。

但是,您可以使用運行狀況監視API(特別是心跳功能)。 看到:

http://msdn.microsoft.com/zh-CN/library/system.web.management.webheartbeatevent.aspx

有關該類的詳細信息,您需要在有工作要做時調用該實現

SO上的這個答案也可能有助於了解ASP.NET運行狀況監視中的心跳

一旦實現了webheartbeatevent派生類,就可以檢查數據庫或您想檢查的內容是否有工作要做。

恕我直言,更好的解決方案是完全取消服務,並將系統重新設計為基於Web的100%,因為服務已成為部署和維護的噩夢。 我以為你現在正在發現...

暫無
暫無

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

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