簡體   English   中英

崩潰時自動重啟自托管的WCF服務

[英]Automatically restart a self hosted wcf service on crash

我有一個自托管的wcf服務,該服務通過dll導入和pinvoke使用舊版c ++代碼。 在舊代碼中有一些實例,這些異常來自功能(在舊應用程序中處理,但不在服務中處理),當它們發生時,我的服務就停止了。 例外情況很少見; 但是,我不希望我的服務只是由於另一個程序集的崩潰而隨機停止。 異常不會影響服務,因此我無法在服務中嘗試/捕獲它們。 有沒有一種方法可以使服務自動崩潰?

它是自托管的,而不是通過IIS。

提前致謝!!

在運行服務的計算機上,可以打開服務管理控制台(開始>運行> services.msc)。 找到您的服務,右鍵單擊它,然后選擇“屬性”。 在彈出窗口中,單擊“恢復”選項卡。 將“第一,第二和后續故障”設置為全部以重新啟動服務。

如果使用WIX安裝項目,則還可以使用util:ServiceConfig元素設置這些屬性。

如果您使用的是標准ServiceInstaller,則不會內置這些選項。建議您查看一下ServiceInstaller Extension類,該類通過標准服務安裝程序界面公開屬性。

好吧,我假設您正在為自己的工作創建Windows Service項目。 進入您的ProjectInstaller並找到“ AfterInstall”方法。 在這里,您將需要添加代碼以在服務控制器上執行命令以設置恢復選項。 不幸的是,即使.NET具有ServiceController,您仍需要通過進程啟動來執行命令。

using (var process = new Process())
{
    var startInfo = process.StartInfo;
    startInfo.FileName = "sc";
    startInfo.WindowStyle = ProcessWindowStyle.Hidden;

    // tell Windows that the service should restart if it fails
    startInfo.Arguments = string.Format("failure \"{0}\" reset= 0 actions= restart/60000", serviceName);

    process.Start();
    process.WaitForExit();

    exitCode = process.ExitCode;

    process.Close();
}

注意:我從另一個問題中 竊取了此代碼

暫無
暫無

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

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