In this previous post I gave an example of a DOS batch script that simulated an unstable network. This is an alternative to that in .NET, which uses the `System.ServiceProcess` namespace
Let’s start with the main function:
private static async Task MainLoop() { while (true) { Console.WriteLine("Stopping IIS"); StopService("World Wide Web Publishing Service", 10000); await Task.Delay(3000); Console.WriteLine("Starting IIS"); StartService("World Wide Web Publishing Service", 10000); await Task.Delay(5000); } }
This defines the flow of the code: essentially, it’s just stop the IIS service, wait, start it again… and wait. The service name for IIS is “World Wide Web Publishing Service” – at least for Windows 7 & 8 it is. The start and stop functions look like this:
public static void StartService(string serviceName, int timeoutMilliseconds) { ServiceController service = new ServiceController(serviceName); TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds); service.Start(); service.WaitForStatus(ServiceControllerStatus.Running, timeout); } public static void StopService(string serviceName, int timeoutMilliseconds) { ServiceController service = new ServiceController(serviceName); // Only stop if it's started if (service.Status != ServiceControllerStatus.Running) return; TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds); service.Stop(); service.WaitForStatus(ServiceControllerStatus.Stopped, timeout); }
Obviously these could be used to stop and start any service; although you must be running as admin to affect admin services (such as IIS).
To test this, check you have a “default.htm” in your wwwroot and then navigate to localhost in a web browser. Run this app in the background and press F5 on your browser until you get an error.