Freigeben über


Einfaches Beispiel

In diesem Beispiel wird erläutert, wie ein Dienst sichtbar gemacht wird und wie nach einem sichtbaren Dienst gesucht und dieser aufgerufen wird. Dieses Beispiel besteht aus zwei Projekten: Dienst und Client.

Dd483369.note(de-de,VS.100).gifHinweis:
In diesem Beispiel wird die Suche in Code implementiert. Ein Beispiel, in dem die Suche in die Konfiguration implementiert wird, finden Sie unter Konfigurationsbeispiel.

Dienst

Dies ist eine einfache Rechnerdienstimplementierung. Der mit der Suche verbundene Code befindet sich in Main. Dort wird dem Diensthost ein ServiceDiscoveryBehavior hinzugefügt, und es wird wie im folgenden Code dargestellt ein UdpDiscoveryEndpoint hinzugefügt.

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

Client

Der Client verwendet einen DynamicEndpoint, um den Dienst zu ermitteln. Der DynamicEndpoint, ein Standardendpunkt, löst den Endpunkt des Diensts auf, wenn der Client geöffnet wird. In diesem Fall sucht der DynamicEndpoint auf Grundlage des Dienstvertrags nach dem Dienst. Der DynamicEndpoint führt die Suche standardmäßig über einen UdpDiscoveryEndpoint durch. Sobald ein Dienstendpunkt gefunden wurde, stellt der Client über die angegebene Bindung eine Verbindung mit dem Dienst her.

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

Der Client definiert eine Methode namens InvokeCalculatorService, die mithilfe der DiscoveryClient-Klasse nach verfügbaren Diensten sucht. Der DynamicEndpoint erbt vom ServiceEndpoint. Deshalb kann er an die InvokeCalculatorService-Methode übergeben werden. Im Beispiel wird dann mithilfe des DynamicEndpoint eine Instanz des CalculatorServiceClient erstellt und die verschiedenen Vorgänge des Rechnerdiensts aufgerufen.

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

So verwenden Sie dieses Beispiel

  1. In diesem Beispiel werden HTTP-Endpunkte verwendet. Zur Ausführung des Beispiels müssen die richtigen URL-ACLs hinzugefügt werden. Weitere Informationen finden Sie unter Konfigurieren von HTTP und HTTPS Durch die Ausführung des folgenden Befehls mit erweiterten Berechtigungen werden die entsprechenden ACLs hinzugefügt. Es empfiehlt sich, die Domäne und den Benutzernamen durch die folgenden Argumente zu ersetzen, wenn der Befehl nicht funktioniert. netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

  2. Öffnen Sie Basic.sln mit Visual Studio 2010, und erstellen Sie das Beispiel.

  3. Führen Sie die SERVICE.EXE-Anwendung aus.

  4. Führen Sie nach dem Starten des Diensts client.exe aus.

  5. Beachten Sie, dass der Client den Dienst ermitteln konnte, ohne seine Adresse zu kennen.

Dd483369.Important(de-de,VS.100).gif Hinweis:
Die Beispiele sind möglicherweise bereits auf dem Computer installiert. Überprüfen Sie das folgende (standardmäßige) Verzeichnis, bevor Sie fortfahren.

<Installationslaufwerk>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, rufen Sie Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 auf, um alle Windows Communication Foundation (WCF)- und WF-Beispiele herunterzuladen. Dieses Beispiel befindet sich im folgenden Verzeichnis.

<Installationslaufwerk>:\WF_WCF_Samples\WCF\Basic\Discovery\Basic