我有一個自我託管的wcf服務,它使用傳統C++代碼通過dll導入和pinvoke。舊代碼中有一些實例(函數在舊應用程序中處理,但未在服務中處理)發生異常,並且當它們發生時,我的服務正在停止。例外情況很少;然而,我不希望我的服務由於另一個程序集崩潰而被隨機停止。例外情況不會冒泡服務,所以我不能在服務中嘗試/捕獲它們。有沒有辦法自動讓服務在崩潰時重新啓動?在崩潰時自動重啓自我託管的wcf服務
它是自我託管的,不是通過IIS。
在此先感謝!
我有一個自我託管的wcf服務,它使用傳統C++代碼通過dll導入和pinvoke。舊代碼中有一些實例(函數在舊應用程序中處理,但未在服務中處理)發生異常,並且當它們發生時,我的服務正在停止。例外情況很少;然而,我不希望我的服務由於另一個程序集崩潰而被隨機停止。例外情況不會冒泡服務,所以我不能在服務中嘗試/捕獲它們。有沒有辦法自動讓服務在崩潰時重新啓動?在崩潰時自動重啓自我託管的wcf服務
它是自我託管的,不是通過IIS。
在此先感謝!
在所在的機器服務正在運行,你可以打開服務管理控制檯(開始>運行> Services.msc)中。找到您的服務,右鍵單擊它並選擇「屬性」。在彈出窗口中,點擊恢復標籤。將第一個,第二個和後續故障設置爲重新啓動服務。
如果您使用WIX安裝項目,也可以使用util:ServiceConfig元素設置這些屬性。
如果您使用的是標準的ServiceInstaller,這些選項都沒有內置的。我建議有一個看ServiceInstaller Extension類通過標準的服務安裝接口公開屬性。
嗯,我假設你正在創建一個Windows服務項目,你正在做什麼。進入你的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();
}
注:我偷這個代碼another question
完美,謝謝!!! – spyter