WCF - Automatically create ServiceHost for multiple services

Posted by Rajesh Pillai on Geeks with Blogs See other posts from Geeks with Blogs or by Rajesh Pillai
Published on Thu, 24 Feb 2011 06:36:49 GMT Indexed on 2011/02/24 7:25 UTC
Read the original article Hit count: 283

Filed under:

WCF - Automatically create ServiceHost for multiple services

Welcome back readers!  This blog post is about a small tip that may make working with WCF servicehost a bit easier, if you have lots of services and you need to quickly host them for testing.
Recently I was encountered a situation where we were faced to create multiple service host quickly for testing.  Here is the code snippet which is pretty self explanatory.  You can put this code in your service host which in this case is  a console application.

class Program
   
{
       
static void Main(string[] args)
       
{
// Stores all hosts

           
List<ServiceHost> hosts = new List<ServiceHost>();

           
try
           
{
// Get the services element from the serviceModel element in the config file

               
var section = ConfigurationManager.GetSection("system.serviceModel/services") as ServicesSection;
               
if (section != null)
               
{
                   
foreach (ServiceElement element in section.Services)
                   
{
// NOTE : If the assembly is in another namespace, provide a fully qualified name here in the form
// <typename, namespace>
// For e.g. Business.Services.CustomerService, Business.Services

                       
var serviceType = Type.GetType(element.Name); // Get the typeName
                       
var host = new ServiceHost(serviceType);

                       hosts
.Add(host); // Add to the host collection
                       host
.Open(); // Open the host
                   
}
               
}

               
Console.ReadLine();
           
}
           
catch (Exception e)
           
{
               
Console.WriteLine(e.Message);
               
Console.ReadLine();
           
}
           
finally
           
{
               
foreach (ServiceHost host in hosts)
               
{
                   
if (host.State == CommunicationState.Opened)
                   
{
                       host
.Close();
                   
}
                   
else
                   
{
                       host
.Abort();
                   
}
               
}
           
}
       
}
   
}

I hope you find this useful.  You can make this as a windows service if required.

© Geeks with Blogs or respective owner