Sdílet prostřednictvím


Základní ukázka

Ukázka základního zjišťování ukazuje, jak vytvořit zjistitelnou službu a jak vyhledat a volat zjistitelnou službu. Tato ukázka se skládá ze dvou projektů: služby a klienta.

Poznámka:

Tato ukázka implementuje zjišťování v kódu. Ukázku, která implementuje zjišťování v konfiguraci, najdete v tématu Konfigurace.

Služba

Jedná se o jednoduchou implementaci služby kalkulačky. Kód související se zjišťováním najdete v místě, kde MainServiceDiscoveryBehavior se přidá do hostitele služby a UdpDiscoveryEndpoint přidá se, jak je znázorněno v následujícím kódu.

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();
    // ...
}

Klient

Klient používá DynamicEndpoint k vyhledání služby. Standardní DynamicEndpointkoncový bod přeloží koncový bod služby při otevření klienta. V tomto případě DynamicEndpoint vyhledá službu na základě kontraktu služby. Vyhledávání DynamicEndpoint provádí UdpDiscoveryEndpoint ve výchozím nastavení. Jakmile vyhledá koncový bod služby, klient se k této službě připojí přes zadanou vazbu.

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

Klient definuje metodu, InvokeCalculatorService která používá DiscoveryClient třídu k vyhledávání služeb. Dědí DynamicEndpoint z ServiceEndpoint, takže lze předat metodě InvokeCalculatorService . Příklad pak použije DynamicEndpoint k vytvoření instance CalculatorServiceClient a volání různých operací služby kalkulačky.

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();
}

Použití této ukázky

  1. Tato ukázka používá koncové body HTTP a ke spuštění této ukázky je nutné přidat správné seznamy ACL adres URL. Další informace najdete v tématu Konfigurace PROTOKOLU HTTP a HTTPS. Spuštěním následujícího příkazu se zvýšenými oprávněními by se měly přidat příslušné seznamy ACL. Pokud příkaz nefunguje tak, jak je, může být vhodné nahradit doménu a uživatelské jméno následujícími argumenty. netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

  2. Pomocí sady Visual Studio otevřete Basic.sln a sestavte ukázku.

  3. Spusťte aplikaci service.exe.

  4. Po spuštění služby spusťte client.exe.

  5. Všimněte si, že klient mohl službu najít, aniž by věděl její adresu.