Configuring Multiple End points for WCF Service

No.of Views1396
Bookmarked0 times
Downloads 
Votes0
By  Dhananjay Kumar   On  06 Jun 2010 09:06:53
Tag : WCF , Utilities
In this article, I will explain how we could configure multiple binding for WCF service.
emailbookmarkadd commentsprint

Images in this article missing? We recently lost them in a site migration. We're working to restore these as you read this. Should you need an image in an emergency, please contact us at info@codegain.com

 

Note: Same Article from Author is published on his personal blog also.  You can find article here

Objective

In this article, I will explain how we could configure multiple binding for WCF service. To see the video tutorial of hosting WCF Service in Console Application Click Here 

Image Loading

While creating multiple endpoints for the service, make sure each end point is having unique address.  If address is not unique, you will catch with run time error. 

Image Loading

Mathematically, we can say 

Image Loading

Scenario for Multiple End Points

1.    Service wants to expose more than one type of binding.
2.    Service wants to expose more than one contract on the same binding.
3.    Service wants to expose same binding and contract on different addresses.
Multiple End Points could be configuring in Web.Config file. 

Image Loading

Sample Service with multiple End Points

Step 1

Create a WCF Service Application.  Open Visual studio and create new project selecting WCF Service Application project template.  In VS2008, you will get WCF Service Application project template inside WEB tab whereas in VS2010, you will get WCF Service Application project template inside WCF tab.
 

Step 2

Delete the default code getting created for you by WCF.   Delete all the code from IService1 and Service1. If you are using VS2008, comment out whole System.ServiceModel from Web.Config file. And if you are using VS2010 then comment out Multiple Host Binding.

Step 3

Contract is as below 

Image Loading

Service implementation is 

Image Loading

Step 4


To see the video tutorial of hosting WCF Service in Console Application Click Here,Create a console application to host the service.
For this,
1.     Right click and add new project to your solution of Console type.
2.     Add Reference of System.ServiceModel.
3.    Add project reference of WCF Service Application created in Step 1.
4.    Make this Console application as your startup project. To make this right click on console application and select make as startup project.
5.    Right click on the console application then select add new item and then add new Application Configuration File. 

Image Loading

Step 5

Configure the multiple end points here.
1.    Add as many end points as you want in service tag.
2.    Make sure none of the end points is having same address.  Else you will get run time error.
3.    Advisable is to use relative address. So for that add base address using Host tag.

So configuration file with multiple end points can look like, 

Image Loading

Explanation

1.    There are two end points getting exposed.
2.    Relative address is being used to expose the end points.
3.    Two end points are having their respective names as firstBinding and secondBinding.
Press F5 to run the host (Console) application. 

Image Loading

Keep open this console running window.  Do not close this window.

Step 6

Create a Console client.  To do, open visual studio and create a new console application.  Add Service Reference. Copy the base address from app.config of host console application (created in Step 5) and paste as Service URL. 

Image Loading

You can see in above code, we are creating proxy twice by passing end point names respectively.  If you want, you can pass address of respective endpoint also along with name of the end point. 

Image Loading

When you press F5, you will get below output. 

Image Loading

For your Reference full source code is given below,

WCF Service Application

Contract (IService1.cs)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
namespace MultipleEndpoints
{
   
    [ServiceContract]public interface IService1
    {

        [OperationContract]string GreetingMessage(string Name);
    }


}

Service1.svc.cs

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace MultipleEndpoints
{public class Service1 : IService1
    {public string GreetingMessage(string name)
        {return "You are Called From " + name; 
        }
       
    }
}

Hosting Console Application

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using MultipleEndpoints; 

namespace ConsoleApplication1
{class Program
    {static void Main(string[] args)
        {

            ServiceHost host = new ServiceHost(typeof(Service1));
            host.Open();
            Console.WriteLine("Service is up and running");
            Console.WriteLine("To Close Service Press any Key ");
            Console.ReadKey();
            host.Close();

        }
    }
}

App.Config

 

<?xml version="1.0" encoding="utf-8" ?><configuration><system.serviceModel><behaviors><serviceBehaviors><behavior name ="Mg"><serviceMetadata httpGetEnabled="true"/><serviceDebug includeExceptionDetailInFaults="false"/></behavior></serviceBehaviors></behaviors><services ><service name ="MultipleEndpoints.Service1"behaviorConfiguration ="Mg"><endpointname="firstBinding"address ="/MyFirstBindingAddress"binding ="basicHttpBinding"contract ="MultipleEndpoints.IService1" /><endpoint name="secondBinding"address ="/MySecondBindingAddress"binding ="basicHttpBinding"contract ="MultipleEndpoints.IService1"/><endpoint contract="IMetadataExchange"binding="mexHttpBinding"address="mex" /><host><baseAddresses ><add baseAddress ="http://localhost:8181/Service1.svc"/></baseAddresses></host></service ></services></system.serviceModel></configuration>

Client Console application

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ConsoleApplication2.ServiceReference1;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Service1Client proxy1 = null;
            proxy1 = new Service1Client("firstBinding");
Console.WriteLine(proxy1.GreetingMessage(
"First End Point"));
proxy1 = new Service1Client(
"secondBinding");
Console.WriteLine(proxy1.GreetingMessage(
"Second End Point"));

Service1Client proxy = null;
proxy = new Service1Client(
"firstBinding",
"http://localhost:8181/Service1.svc/MyFirstBindingAddress");
Console.WriteLine(proxy.GreetingMessage(
"First End Point calling with Address"));
proxy = new Service1Client(
"secondBinding",
"http://localhost:8181/Service1.svc/MySecondBindingAddress");
Console.WriteLine(proxy.GreetingMessage(
"Second End Point Calling with Address")); Console.ReadLine(); } } }

I hope, this article was useful. Thanks for reading. Happy Coding.

 
Sign Up to vote for this article
 
About Author
 
Dhananjay Kumar
Occupation-Software Engineer
Company-Infosys Technolgies,Pune
Member Type-Gold
Location-India
Joined date-20 Jul 2009
Home Page-http://dhananjaykumar.net/
Blog Page-http://dhananjaykumar.net/
Dhananjay Kumar is Microsoft MVP on connected system. He blogs at http://dhananjaykumar.net/ . You can follow him http://twitter.com/debugmode_/ and reach him at dhananjay.25july@gmail.com
 
 
Other popularSectionarticles
Comments
There is no comments for this articles.
Leave a Reply
Title:
Display Name:
Email:
(not display in page for the security purphase)
Website:
Message:
Please refresh your screen using Ctrl+F5
If you can't read this number refresh your screen
Please input the anti-spam code that you can read in the image.
^ Scroll to Top