Death to Windows Services...Long Live AppFabric!
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
- IIS 7.5 (Windows 2008 R2 or Windows 7)
- Windows Server AppFabric
- .NET Framework 4.0
Step 2: Update Application Pool to Auto-Start
Start IIS Manager and access the configuration
editor:

Select the
system.applicationHost/applicationPools section and click
the ellipsis by the application pool collection:

Select the application pool & change the
start mode to “AlwaysRunning”. Once you close the popup,
make sure you click the Apply button.

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 4: Configure Application with Net.Pipe Binding
Access the advanced settings on the application
(virtual directory) and make sure net.pipe is one of the
enabled protocols.
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
2: {
3: public class AppStart
4: {
5: private static ImportServicePlugin servicePlugin;
6:
7: // Code that runs on application startup by ASP.NET infrastructure
8: public static void AppInitialize()
9: {
10: servicePlugin = new ImportServicePlugin();
11: servicePlugin.Start();
12: }
13:
14: }
15: }
16:
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.

And my personal favorite, you can also
add a web page to your service that provides information
about your service.
Hopefully you're as fired up as I am about these new
possibilities...go try it out.
