Understanding WCF Hosting

 WCF is a flagship product from  Microsoft for developing distributed
application using SOA. Prior to WCF   traditional ASMX Web services were hosted
only on Internet Information Services (IIS). The hosting options for WCF
services are significantly enhanced from Microsoft .NET Framework 3.0 onwards. In
WCF there are three main parts: Service, Endpoints and Hosting Environment. Multiple
services can be hosted using a single host process and also the same service
type can be hosted in multiple host processes. We can host a WCF service in two
ways –  Self Hosting and IIS Hosting. Here we will examine  Self Hosting along
with a comparative discussion of  different hosting environments. For an
introduction to WCF please read my first WCF article at  http://www.sql-server
performance.com/articles/dev/windows_communication_foundation_wcf_intro_p1.aspx

Self Hosting Vs IIS Hosting

Let’s look at  the differences between the two hosting types
available for a WCF service.

Self-Hosting

IIS Hosting

Needs to add code to host the process

Automatic hosting

Host process should be running before client makes a call to the
service.

IIS host runs automatically when a client makes a call to the
service.

Automatic process recycling not possible

Automatic process recycling not possible

Can   controlled the service lifetime using Open and Close methods

Lifetime cannot be controlled manually.

Easy to deploy

More difficult deployment than  Self-Hosting

Protocols Supported

IIS6

http, wshttp

IIS7

HTTP,net.tcp,net.pipe,net.msmq

Windows
console and form application

HTTP,net.tcp,net.pipe,net.msmq

Windows
service

HTTP,net.tcp,net.pipe,net.msmq

WAS

HTTP,net.tcp,net.pipe,net.msmq

Hosting using a Windows Console Application

Here we will walk through how we can host the service using
a windows console application:

Step I: Select the Windows project and then  the Console
Application Template.

Step II: Open the App.Config file.

Step III: Add a reference of the Service project to
the console application project.

//break

Step IV:                                                                                                          

Add   namespace: using System.ServiceModel;

Add namespace: using
WCFSample; 

Step V:

In the main function add the following code.

  
using (ServiceHost
host = new ServiceHost(typeof(Service1)))

           
{

               
host.Open();

               
Console.WriteLine(“Service
is running”);

               
Console.ReadKey();

            }

Step VI:

Run the application and you should see the below  output:

Other Self-Hosting options

We can also use Windows Forms ,WPF forms or Windows Services
for self Hosting. Windows services can start when the system starts, without
requiring a user to log in to the machine and this unique advantage makes a  Windows
Service  a great way for self hosting.

In case of windows Form or WPF Form in the Form Page Load we
can write the following code:

 
using (ServiceHost
host = new ServiceHost(typeof(Service1)))

           
{

               
host.Open();

               
MessageBox.Show(“Service
is running”); 

            }

In the case of a  windows service, we have to open and close
the host in the OnStart and OnStop methods respectively. The code as follows:

 
ServiceHost _host = null;

       
protected override
void OnStart(string[]
args)

       
{

           
_host = new ServiceHost(typeof(Service1));

           
_host.Open();

       
}

       
protected override
void OnStop()

       
{

           
if (_host != null)

           
{

               
_host.Close();

               
_host = null;

           
}

        }

Hosting in WAS:

Windows Activation Service (WAS) was introduced with Windows
Vista. WAS is part of IIS7 but can be installed and configured separately. WAS
builds on the existing IIS 6.0 process and hosting models, but is much more
powerful because it provides support for other protocols besides HTTP. Now, all
the great features of IIS (on-demand activation, process health monitoring,
enterprise-class manageability, rapid failure protection), are also available
for  non-HTTP-based applications (TCP and Named Pipes)like HTTP based
applications. Like IIS Hosting, WAS also requires a .svc file.

Optimal Hosting Environment:

Each and hosting environment has its own merits and
demerits. In the case of self-hosting(or hosting a WCF service in a managed
application) we have already seen that it needs less infrastructure to deploy
and takes only two lines of code to create the service host and open the
service to expose it to clients keeping all the endpoints definitions
(addresses and bindings) in the config file. In self hosting we can use a console
application as well as rich form based applications such as windows form
applications or WPF applications. So the  question arises should we go with a console
application or with a rich client based application in case of self hosting of
WCF services.A console application provides a quick and simple environment under
which we can develop,test, and debug our service and host but provides very
little in terms of user interface functionality. We can accept this limited UI
functionality and once the service is ready for production,a rich client
application(windows form application or windows presentation foundation
application), can then be used to put the application into production to get
the benefit of communication with external sources such as in a peer to peer
environment.

Hosting WCF service under windows service is more or less
equal to hosting a WCF service in other managed code applications.We have
already seen the advantages of a windows service for hosting a WCF service and
it is ideal in such situations where a WCF service is long running and requires
no user interaction. Unlike a windows service, an IIS hosting environment can
only communicate over the HTTP protocol and has  no explicit control ofver the service
lifetime. However,  WAS gives us a solution after almost combining the benefits
of both IIS and windows service by extending the WCF services beyond HTTP.

Conclusion:

WCF hosting allows services to be hosted in different
environments such as Windows NT,Windows Forms,console applications,
IIS(Internet Information Services) and Windows Activation Services(WAS). The choice
will depend on the version of windows and the  transport protocols i.e, how the
service will send the messages.Both hosted and self-hosted having their
advantages and disadvantages.The goal is to recognise and determine the best
hosting environment for WCF service.




Array

No comments yet... Be the first to leave a reply!

Software Reviews | Book Reviews | FAQs | Tips | Articles | Performance Tuning | Audit | BI | Clustering | Developer | Reporting | DBA | ASP.NET Ado | Views tips | | Developer FAQs | Replication Tips | OS Tips | Misc Tips | Index Tuning Tips | Hints Tips | High Availability Tips | Hardware Tips | ETL Tips | Components Tips | Configuration Tips | App Dev Tips | OLAP Tips | Admin Tips | Software Reviews | Error | Clustering FAQs | Performance Tuning FAQs | DBA FAQs |