Using WS-Discovery in WCF 4.0

Runtime endpoint discovery is one of the most challenging capabilities to implement in service oriented systems. Dynamically resolving service’s endpoints based on predefined criteria is a necessary functionality to interact with services which endpoint addresses change frequently. WS-Discovery is an OASIS Standard that defines a lightweight discovery mechanism for discovering services based on multicast messages. Essentially, WS-Discovery enables a service to send a Hello announcement message when it is initialized and a Bye message when is removed from the network. Clients can discover services by multicasting a Probe message to which a service can reply with a ProbeMatch message containing the information necessary to contact the service. Additionally, clients can find services that have changed endpoint by issuing a Resolve message to which respond with a ResolveMatch message.

 

Figure: WS-Discovery conceptual model

Contrary to other WS-* protocols, WS-Discovery has found a great adoption among the network device builders as it allows to streamline the interactions between these type of devices. For instance, a printer can use WS-Discovery to announce its presence on a network so that it can be discovered by the different applications that require printing documents. Windows Vista's contact location system is another example of a technology based on WS-Discovery.

The 4.0 release of Windows Communication Foundation includes an implementation of WS-Discovery that enables service’s endpoints as runtime discoverable artifacts. WCF enables the WS-Discovery capabilities in two fundamental models: Managed and Ad-Hoc. The managed mode assumes a centralized component called service proxy that serves as a persistent repository for all the services in a network. When a service is initialized it publishes its details to the discovery proxy so that it becomes accessible the the different clients in the network.

Contrary to the managed model, the Ad-Hoc mechanism does not rely on a centralized discovery proxy. In this model, services publish their presence in a network by multicasting announcement message that can be processed by the interested consumers. Additionally, clients can also multicast discover messages through the network in order to find a service that matches predefined criteria.

WCF's WS-Discovery managed mode will be the subject on a future post. Today we would like to illustrate the details of enabling dynamic discovery using the WS-Discovery 's Ad-Hoc model in WCF 4.0. This model is traditionally simpler to implement than the managed model although it can introduce some challenges from the management standpoint.

WCF 4.0 abstracts the WS-Discovery Ad-Hoc model using the ServiceDiscoveryBehavior which indicates that a service can be discoverable and the UdpDiscoveryEndpoint that instantiates a service endpoint that can listen for discovery requests. The remaining of this post will provide a practical example of the use of the WS-Discovery Ad-Hoc model in WCF 4.0

Let’s start with the following WCF service.

   1:      public class SampleService: ISampleService
   2:      {
   3:          public string Echo(string msg)
   4:          {
   5:              return msg;
   6:          }
   7:      }
   8:   
   9:      [ServiceContract]
  10:      public interface ISampleService
  11:      {
  12:          [OperationContract]
  13:          string Echo(string msg);
  14:      }

Figure: Sample WCF Service

In order to make the service discoverable we first need to add the ServiceDiscoveryBehavior to the service behavior’s collection. As explained previously, this behavior indicates to the WCF runtime that the service supports the WS-Discovery protocol.

   1:  using (ServiceHost host = new ServiceHost(typeof(SampleService), new Uri(base uri...)))
   2:  {
   3:   ...
   4:    host.AddServiceEndpoint(typeof(ISampleService), new BasicHttpBinding(), String.Empty);
   5:    ServiceDiscoveryBehavior discoveryBehavior= new ServiceDiscoveryBehavior();             
   6:    host.Description.Behaviors.Add(discoveryBehavior);
   7:    ...       
   8:  }

Figure: Adding the service discovery behavior

The next step is to add the UdpDiscoveryEndpoint to the list of service endpoints so that our service can start listening for WS-Discovery messages.

   1:   host.AddServiceEndpoint(new UdpDiscoveryEndpoint());

Figure: Adding an UDP discovery endpoint

At this point our service is ready to receive and interpret WS-Discovery messages from the different clients on the network. However those clients are not yet aware of the existence of the service given that this one hasn’t published the Hello announcement message. We can accomplish this by simply adding a new UdpAnnoucement endpoint to the list of service endpoints.

   1:   discoveryBehavior.AnnouncementEndpoints.Add(new UdpAnnouncementEndpoint());

Figure: Adding an UDP announcement endpoint

In order to dynamically discover services using the Ad-Hoc model, a WCF client instantiates a DiscoveryClient that uses discovery endpoint specifying where to send Probe or Resolve messages. The client then calls Find that specifies search criteria within a FindCriteria instance. If matching services are found, Find returns a collection of EndpointDiscoveryMetadata. The following code illustrates that concept.

   1:   DiscoveryClient discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());
   2:   FindResponse discoveryResponse= discoveryClient.Find(new FindCriteria(typeof(ISampleService)));
   3:   EndpointAddress address = discoveryResponse.Endpoints[0].Address;
   4:   
   5:  SampleServiceClient service = new SampleServiceClient(new BasicHttpBinding(), address);
   6:  service.Echo("WS-Discovery test");

Figure: WCF WS-Discovery client

The WCF implementation of the WS-Discovery Ad-Hoc model presents various aspects that I think are worth highlighting. First, WCF uses specialized discovery and announcement endpoints to process WS-Discovery messages isolating them from the service’s messages. Additionally, the use of service behaviors allow developers to incorporate the WS-Discovery capabilities as they are required without interfering with the normal service functioning. Finally, WCF clients can simply use the discovery client to dynamically resolve the service endpoint without having to make major modifications to its business logic.

We will cover the WS-Discovery managed mode in a future post.

Comments

# re: Using WS-Discovery in WCF 4.0

Interesting- kind of like IoC for services... One comment: in my experience, all this WS-* stuff breaks down pretty quickly when you have to interop with non-.NET clients.  I realize that MS can't exactly make Java/PHP/Ruby/etc play with WS-*, but it's annoying to have these "open" standards that get thrown out the window the second we have to talk to non-.NET systems.  Invariably, even large SOA companies have told us "just use plain SOAP 1.1 over SSL".

Friday, February 13, 2009 12:38 PM by Daniel

# re: Using WS-Discovery in WCF 4.0

I always problem with this Error "Target of Invocation" when i use wcf ws-Eventing(publish/Sub model), whenever client disconnected or busy to receive message from wcf service.

Any idea to solve it?

Sunday, February 15, 2009 8:44 PM by hanson

# re: Using WS-Discovery in WCF 4.0

It's really nice to figure out how extandable WCF architecture is. Just added Service Behavior to the server side.

Tuesday, March 24, 2009 11:59 AM by Leonid Shirmanov

# re: Using WS-Discovery in WCF 4.0

Hi,

Do you know some scenario where can I use this feature?

Wednesday, May 13, 2009 4:34 PM by Kevin

# re: Using WS-Discovery in WCF 4.0

All the discovery examples I have seen assume basic HTTP as the binding.

Is there any facility in discovery for also publishing the binding requirements to talk to the advertised endpoint?

It seems to me that its a bit of a defecit if the client must 'assume' the protocol and security requirements, when it could be passed in the discovery meta-data.

Thanks

Thursday, May 28, 2009 12:39 AM by Adam Langley

# re: Using WS-Discovery in WCF 4.0

Can WCF be used with the Compact Framework v3.5?

regards,

Shrishail

Wednesday, June 24, 2009 12:11 AM by Shrishail

# re: Using WS-Discovery in WCF 4.0

It was certainly interesting for me to read that blog. Thanx for it. I like such themes and everything connected to this matter. BTW, try to add some photos :).

Saturday, January 23, 2010 6:36 PM by OrdinarySomething

# re: Using WS-Discovery in WCF 4.0

Hello Sir,

REF : WCF Discovery - Probe Match message.

I would like to know how do I modify probe match message at run time.i have  this requirement that i have to added element to the probe match before sending to the client,

I have tried this using message inspector but it is not working during probe match message exchange the message null, not sure why this is happening

you have pointer please let me know

Thank You,

Natraj Mustoori

Wednesday, April 21, 2010 2:52 PM by Natraj

# re: Using WS-Discovery in WCF 4.0

I have problems with udp discovery from different subnet. Maybe the switch is rejecting udp packages. Any other ideas ???

eabreu@estudiantes.uci.cu

Monday, December 13, 2010 10:35 AM by Eberto

# re: Using WS-Discovery in WCF 4.0

He that makes a good war makes a good peace.

-----------------------------------

Saturday, December 18, 2010 7:43 PM by world cup ipad app

# re: Using WS-Discovery in WCF 4.0

-----------------------------------------------------------

"That’s Too nice, when it comes in india desire it could make a Rocking spot for youngster.. desire that arrive correct."

Monday, January 3, 2011 9:55 AM by best ipad stand

# re: Using WS-Discovery in WCF 4.0

-----------------------------------------------------------

"I am speechless. This is often a fantastic webpage and incredibly partaking too. Outstanding function! That's not seriously significantly coming from an beginner author like me, but it is all I could  feel immediately after enjoying your posts. Excellent grammar and vocabulary. Not like other weblogs. You really know what you are speaking about too. A lot that you just created  me want to investigate much more. Your blog site has turn into a stepping stone for me, my friend. Thanks for your articulate quest. I truly loved the 27 posts that I  have go through up to now. "

Saturday, January 8, 2011 8:37 AM by ipad app reviews

# re: Using WS-Discovery in WCF 4.0

The catchy weblog with the exciting posts. You give the great data that a lot of individuals don't know prior to. most of one's contents are make me have much more knowledge. it truly is extremely distinct. I was impressed together with your web site. By no means be bored to take a look at your internet site once again. Have the good day.Retain enjoyed your blogging.

--------------------------------------------------------------------    

Biology, Neuroscience

Monday, January 17, 2011 10:47 AM by mp3 player reviews

# re: Using WS-Discovery in WCF 4.0

Yes there should realize the opportunity to RSS commentary, quite simply, CMS is another on the blog.

Monday, August 29, 2011 2:35 AM by tryecrot

# re: Using WS-Discovery in WCF 4.0

Get a hold of all which can be about African Mangoo within few seconds.

Friday, August 3, 2012 6:43 AM by Longoria

# re: Using WS-Discovery in WCF 4.0

great article very usefull , thanks you

Wednesday, October 17, 2012 7:46 PM by londonladies

# re: Using WS-Discovery in WCF 4.0

www.eforcsenow.com    Wow, I have a website too but I can't write too as you do. Good stuff.

Sunday, October 21, 2012 1:28 PM by uSkyShaceie

# re: Using WS-Discovery in WCF 4.0

The that the next occasion I just read a blog, Hopefully

that this doesnt disappoint me up to this. I am talking about, It was

my path to read, but I really thought youd have something interesting to express.

All I hear can be a number of whining about something you to

could fix should you werent too busy seeking for attention.

Sunday, November 18, 2012 9:32 PM by Montenegro

# re: Using WS-Discovery in WCF 4.0

you are in point of fact a good webmaster. The web site loading

velocity is amazing. It seems that you're doing any distinctive trick. Furthermore, The contents are masterwork. you've performed a

magnificent job in this topic!

Friday, November 23, 2012 12:24 AM by Stackhouse

# re: Using WS-Discovery in WCF 4.0

Great ¡V I should certainly pronounce, impressed with your

site. I had no trouble navigating through all tabs because well as related information ended

up being truly straightforward to do to access.

I recently found what I hoped for before you recognize

it at all. Quite unusual. Is likely to appreciate it for those who add

forums or anything, website theme . a tones tactic

for your client to communicate. First-rate task.

.

Sunday, November 25, 2012 7:24 PM by Robb

# re: Using WS-Discovery in WCF 4.0

Oh my goodness! a tremendous article dude. Thanks However I'm experiencing problem with ur rss . Don’t know why Unable to subscribe to it. Is there anybody getting identical rss downside? Anyone who is aware of kindly respond. Thnkx

  www.eforcsenow.com

Tuesday, November 27, 2012 2:51 AM by kMaxineSierrabbe

# re: Using WS-Discovery in WCF 4.0

   Really a great blog! Just found it today and surely continue to look for updates.

Tuesday, November 27, 2012 11:00 PM by nShawnBlueaawf

# re: Using WS-Discovery in WCF 4.0

there are so a whole lot of funny videos on that the internet to watch, i can

laugh all day watching funny videos’

Thursday, December 20, 2012 7:16 PM by Wicks

# re: Using WS-Discovery in WCF 4.0

Very fine publish, thanks a ton for sharing. Do you happen to have

an RSS feed I can subscribe to?

Friday, December 21, 2012 1:17 AM by Helm

# re: Using WS-Discovery in WCF 4.0

Youre so cool! I dont suppose Ive read something such as

this before. So nice to look for somebody with

authentic applying for grants this subject.

realy i appreciate you for starting this up. this fabulous website have been

some things that’s needed on that the web, somebody after some bit

originality. helpful purpose of bringing new things to your web!

Tuesday, December 25, 2012 2:22 AM by Dailey

# re: Using WS-Discovery in WCF 4.0

Add to that list Michael Pena and Bridget Moynahan, the

two adults among three other youngsters whom Nantz and his men

locate at the station.

Tuesday, December 25, 2012 11:26 PM by Quintanilla

# re: Using WS-Discovery in WCF 4.0

Wow, wonderful blog layout! How long have you been blogging

for? you make blogging look simple. That the overall look of your web site is fantastic,

let alone the content!

Sunday, December 30, 2012 2:31 AM by Daly

# re: Using WS-Discovery in WCF 4.0

First-rate day. i am doing research right now and your blog really helped me,

Thursday, January 31, 2013 5:58 AM by Ngo