Up until now, the only option for running always on/long running processes was to build a Windows Services. While .NET made building Windows Services easier, they still come with their own set of headaches. Windows Server AppFabric adds an Auto-Start/Always-Running feature which allows IIS hosted services to behave more like traditional Windows Services. Services will automatically start when the computer boots, an application pool is started, or an IISRESET is performed.
Why use this feature?
By hosting within IIS, applications receive the following benefits:
- Single hosting framework for all application components. Web sites, services, and long running services can be hosted using the same framework & management tools.
- Improved deployment capabilities. XCOPY deployment is
now possible or use the new Web
Deploy functionality. Web Deploy is enough of a reason by itself!
- Provide self-hosted management or monitoring web pages. You can easily add ASPX web pages to your service to provide status on their work load.
- Utilize IIS automatic management features. Optionally configure your service to recycle on a given interval or based on memory usage, just like any other IIS hosted service.
Step 1: Install the prerequisites
Step 2: Update Application Pool to Auto-Start
Start IIS Manager and access the configuration editor:
Step 3: Configure Site with Net.Pipe Binding
The net.pipe binding is used by AppFabric to control the hosted service. Navigate to the site & click edit bindings. Add net.pipe if it isn’t already there.
Step 5: Configure Application with Auto-Start
Access the Configure WCF and WF option on the application. Click on the Auto-Start tab & select “Enabled”.
Step 6: Make changes to the application code
Add your thread initialization to the AppStart class. It is fired for both HTTP and non-HTTP activation (such as net.pipe). Do not put the code in global.asax since it is only invoked for the HTTP pipeline. You need to create a class called AppStart within App_Code directory. It should have a public static method of AppInitialize.
AppStart.cs (within App_Code directory)
1: namespace Payformance.Services.ImportService
3: public class AppStart
5: private static ImportServicePlugin servicePlugin;
7: // Code that runs on application startup by ASP.NET infrastructure
8: public static void AppInitialize()
10: servicePlugin = new ImportServicePlugin();
Step 7: Monitoring
Since all services will be hosted under the w3wp.exe process name, you can see the Worker Process associated with your application pool within the IIS manager:
Another approach is to use the SysInternals Process Explorer free from Microsoft. Add the “Command Line” column to the grid, and the application pool name will be listed after the –ap switch.
Hopefully you're as fired up as I am about these new possibilities...go try it out.