Domanda

I want to find a WCF service using it's address. I wrote the following code:

var uri = "http://bla-blabla.svc"
var obj = new DiscoveryClient(new UdpDiscoveryEndpoint());
        var findCriteria = new FindCriteria();
        findCriteria.Duration = TimeSpan.FromSeconds(10);
        findCriteria.Scopes.Add(new Uri(uri));
        var findResponse = obj.Find(findCriteria);

But it doesn't find anything... If I try to search using WCF test client using the link, it works... What I'm doing wrong?

È stato utile?

Soluzione

When you use WCF test client, you are not using the Discovery feature. It's a classic call to the wsdl/metadata of the service.

Your target Service should be discoverable, by adding something in the host or in the config.

Code

ServiceHost host = new ServiceHost(...); 
host.AddServiceEndpoint(new UdpDiscoveryEndpoint());
ServiceDiscoveryBehavior discovery = new ServiceDiscoveryBehavior();
host.Description.Behaviors.Add(discovery);
host.Open();

Config

<services>
       <service name = "MyService">
          <endpoint 
             kind = "udpDiscoveryEndpoint"
          />
          ...
       </service>
    </services>
    <behaviors>
       <serviceBehaviors>
          <behavior>
             <serviceDiscovery/>
          </behavior>
       </serviceBehaviors>
    </behaviors>

At first, also remove the scope in the find criteria.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top