Podstawowy przykład

Przykład podstawowego odnajdywania przedstawia sposób odnajdywania usługi oraz sposób wyszukiwania i wywoływania odnajdywalnej usługi. Ten przykład składa się z dwóch projektów: usługi i klienta.

Uwaga

Ten przykład implementuje odnajdywanie w kodzie. Aby uzyskać przykład, który implementuje odnajdywanie w konfiguracji, zobacz Konfiguracja.

Usługa

Jest to prosta implementacja usługi kalkulatora. Kod powiązany z odnajdywaniem można znaleźć w miejscu, w Main którym ServiceDiscoveryBehavior element jest dodawany do hosta usługi, a element UdpDiscoveryEndpoint jest dodawany, jak pokazano w poniższym kodzie.

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 używa a DynamicEndpoint do lokalizowania usługi. , DynamicEndpointstandardowy punkt końcowy, rozpoznaje punkt końcowy usługi po otwarciu klienta. W tym przypadku DynamicEndpoint wyszukiwanie usługi na podstawie kontraktu usługi. Domyślnie DynamicEndpoint przeprowadza wyszukiwanie UdpDiscoveryEndpoint . Po zlokalizowaniu punktu końcowego usługi klient łączy się z usługą za pośrednictwem określonego powiązania.

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

Klient definiuje metodę o nazwie InvokeCalculatorService , która używa DiscoveryClient klasy do wyszukiwania usług. Dziedziczy DynamicEndpoint z ServiceEndpointklasy , aby można go było przekazać do InvokeCalculatorService metody . W tym przykładzie użyto elementu , DynamicEndpoint aby utworzyć wystąpienie CalculatorServiceClient obiektu i wywołać różne operacje usługi kalkulatora.

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

Aby użyć tego przykładu

  1. W tym przykładzie użyto punktów końcowych HTTP i do uruchomienia tego przykładu należy dodać odpowiednie listy ACL adresów URL. Aby uzyskać więcej informacji, zobacz Konfigurowanie protokołu HTTP i HTTPS. Wykonanie następującego polecenia z podwyższonym poziomem uprawnień powinno spowodować dodanie odpowiednich list ACL. Jeśli polecenie nie działa, możesz zastąpić domenę i nazwę użytkownika następującymi argumentami. netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

  2. Za pomocą programu Visual Studio otwórz Basic.sln i skompiluj przykład.

  3. Uruchom aplikację service.exe.

  4. Po uruchomieniu usługi uruchom client.exe.

  5. Zwróć uwagę, że klient mógł znaleźć usługę bez znajomości jej adresu.