Delen via


Basisvoorbeeld

Het basisdetectievoorbeeld laat zien hoe u een service detecteerbaar maakt en hoe u een detecteerbare service kunt zoeken en aanroepen. Dit voorbeeld bestaat uit twee projecten: service en client.

Opmerking

In dit voorbeeld wordt detectie in code geïmplementeerd. Zie Configuratie voor een voorbeeld waarmee detectie in de configuratie wordt geïmplementeerd.

Dienst

Dit is een eenvoudige rekenmachineservice-implementatie. De detectiegerelateerde code vindt u in Main de locatie waar een ServiceDiscoveryBehavior wordt toegevoegd aan de servicehost en een UdpDiscoveryEndpoint wordt toegevoegd, zoals wordt weergegeven in de volgende code.

using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress))
{
    serviceHost.AddServiceEndpoint(typeof(ICalculatorService), new
      WSHttpBinding(), String.Empty);

    // Make the service discoverable over UDP multicast
    serviceHost.Description.Behaviors.Add(new ServiceDiscoveryBehavior());
    serviceHost.AddServiceEndpoint(new UdpDiscoveryEndpoint());

    serviceHost.Open();
    // ...
}

Cliënt

De client gebruikt een DynamicEndpoint om de service te vinden. Het DynamicEndpoint, een standaardeindpunt, lost het eindpunt van de service op wanneer de client wordt geopend. In dit geval zoekt de DynamicEndpoint naar de service op basis van het servicecontract. Standaard voert de DynamicEndpoint de zoekopdracht uit op een UdpDiscoveryEndpoint. Zodra een service-eindpunt is gevonden, maakt de client verbinding met die service via de opgegeven binding.

public static void Main()
{
   DynamicEndpoint dynamicEndpoint = new DynamicEndpoint( ContractDescription.GetContract(typeof(ICalculatorService)), new WSHttpBinding());
   // ...
}

De client definieert een methode InvokeCalculatorService die de DiscoveryClient klasse gebruikt om te zoeken naar services. De DynamicEndpoint erft van ServiceEndpoint, zodat het kan worden doorgegeven aan de InvokeCalculatorService-methode. In het voorbeeld wordt DynamicEndpoint vervolgens gebruikt om een instantie van CalculatorServiceClient te maken en de verschillende bewerkingen van de rekenmachineservice aan te roepen.

static void InvokeCalculatorService(ServiceEndpoint serviceEndpoint)
{
   // Create a client
   CalculatorServiceClient client = new CalculatorServiceClient(serviceEndpoint);

   Console.WriteLine("Invoking CalculatorService");
   Console.WriteLine();

   double value1 = 100.00D;
   double value2 = 15.99D;

   // Call the Add service operation.
   double result = client.Add(value1, value2);
   Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);

   // Call the Subtract service operation.
   result = client.Subtract(value1, value2);
   Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);

   // Call the Multiply service operation.
   result = client.Multiply(value1, value2);
   Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);

   // Call the Divide service operation.
   result = client.Divide(value1, value2);
   Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);
   Console.WriteLine();

   //Closing the client gracefully closes the connection and cleans up resources
   client.Close();
}

Dit voorbeeld gebruiken

  1. Dit voorbeeld maakt gebruik van HTTP-eindpunten en om dit voorbeeld uit te voeren, moeten de juiste URL-ACL's worden toegevoegd. Zie HTTP en HTTPS configureren voor meer informatie. Als u de volgende opdracht uitvoert met een verhoogde bevoegdheid, moet u de juiste ACL's toevoegen. U kunt uw domein en gebruikersnaam vervangen door de volgende argumenten als de opdracht niet werkt zoals is. netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

  2. Open met Visual Studio de Basic.sln en bouw het voorbeeld.

  3. Voer de service.exe-toepassing uit.

  4. Nadat de service is gestart, voert u de client.exeuit.

  5. Merk op dat de client de service kon vinden zonder het adres ervan te kennen.