C# C取消ServiceController服务状态更改请求
我还没有找到任何关于这方面的信息,所以如果这是重复的,我很抱歉 我正在使用ASP网站在我的代码后面触发WebMethod,它将触发计算机上的服务将其状态更改为前端指定的某个状态 但是,我希望这样,当我在超时时调用ServiceController.WaitForStatus时,它将返回到调用之前的默认状态。因此,如果某个东西的启动/暂停/停止速度不够快,它将恢复到以前的状态,就像什么都没有发生一样 有办法做到这一点吗?我试着打电话给ServiceController.close,但这对我没有任何帮助 是否有一种方法可以优雅地管理此异常,以便在发生超时异常时,它优雅地捕获异常并将服务返回到服务控制器调用之前的原始状态 这是我正在使用的web方法代码:C# C取消ServiceController服务状态更改请求,c#,asp.net,service,C#,Asp.net,Service,我还没有找到任何关于这方面的信息,所以如果这是重复的,我很抱歉 我正在使用ASP网站在我的代码后面触发WebMethod,它将触发计算机上的服务将其状态更改为前端指定的某个状态 但是,我希望这样,当我在超时时调用ServiceController.WaitForStatus时,它将返回到调用之前的默认状态。因此,如果某个东西的启动/暂停/停止速度不够快,它将恢复到以前的状态,就像什么都没有发生一样 有办法做到这一点吗?我试着打电话给ServiceController.close,但这对我没有任何
[WebMethod]
public static string ToggleService(string serverName, string serviceName, string newServiceState) {
ServiceController serviceToToggle = null;
if (newServiceState.ToLower().Equals("start")
|| newServiceState.ToLower().Equals("pause")
|| newServiceState.ToLower().Equals("stop")) {
serviceToToggle = new ServiceController(serviceName, serverName);
}
if (serviceToToggle != null)
{
try
{
if (serviceToToggle.Status == ServiceControllerStatus.Paused)
{
if (newServiceState.ToLower().Equals("start"))
{
serviceToToggle.Start();
serviceToToggle.WaitForStatus(ServiceControllerStatus.Running, new TimeSpan(0, 0, 1));
}
else if (newServiceState.ToLower().Equals("stop"))
{
serviceToToggle.Stop();
serviceToToggle.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(0, 0, 1));
}
}
else if (serviceToToggle.Status == ServiceControllerStatus.Running)
{
if (newServiceState.ToLower().Equals("pause"))
{
serviceToToggle.Pause();
serviceToToggle.WaitForStatus(ServiceControllerStatus.Paused, new TimeSpan(0, 0, 1));
}
else if (newServiceState.ToLower().Equals("stop"))
{
serviceToToggle.Stop();
serviceToToggle.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(0, 0, 1));
}
}
else if (serviceToToggle.Status == ServiceControllerStatus.Stopped)
{
if (newServiceState.ToLower().Equals("start"))
{
serviceToToggle.Start();
serviceToToggle.WaitForStatus(ServiceControllerStatus.Running, new TimeSpan(0, 0, 1));
}
}
return "\"OutputStatus\": \"Success\"";
}
catch (Exception e) {
serviceToToggle.Close();
return "\"OutputStatus\": \"Failed\"";
}
}
return "No service to toggle";
}
我将非常感谢您对此提供的任何帮助或见解。简言之,否-无法恢复或取消已发送到服务的命令 您可以编写代码来记住以前的状态,并在出现错误或超时时启动控制器请求以再次设置该状态,但听起来并不特别健壮
如果它们是您自己的服务,最好编写它们以正确响应服务请求。简言之,否-无法还原或取消已发送到服务的命令。您可以编写代码来记住以前的状态,并在出现错误或超时时启动控制器请求以再次设置该状态,但听起来并不特别健壮。如果它们是您自己的服务,最好编写它们以正确响应服务请求。非常感谢。我想这就是答案。我已经做了相应的计划,并将以另一种方式再次处理这个问题。你能把这个作为一个答案,这样我就可以把它标记为正确答案并给你评分吗?