Einfaches BeispielBasic Sample

In diesem Beispiel wird erläutert, wie ein Dienst sichtbar gemacht wird und wie nach einem sichtbaren Dienst gesucht und dieser aufgerufen wird.This sample shows how to make a service discoverable and how to search for and call a discoverable service. Dieses Beispiel besteht aus zwei Projekten: Dienst und Client.This sample is composed of two projects: service and client.

Hinweis

In diesem Beispiel wird die Suche in Code implementiert.This sample implements discovery in code. Ein Beispiel, die Ermittlung in der Konfiguration implementiert werden, finden Sie unter Konfiguration.For a sample that implements discovery in configuration, see Configuration.

DienstService

Dies ist eine einfache Rechnerdienstimplementierung.This is a simple calculator service implementation. 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.The discovery related code can be found in Main where a ServiceDiscoveryBehavior is added to the service host and a UdpDiscoveryEndpoint is added as shown in the following 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();  
    // ...  
}  

ClientClient

Der Client verwendet einen DynamicEndpoint, um den Dienst zu ermitteln.The client uses a DynamicEndpoint to locate the service. Der DynamicEndpoint, ein Standardendpunkt, löst den Endpunkt des Diensts auf, wenn der Client geöffnet wird.The DynamicEndpoint, a standard endpoint, resolves the endpoint of the service when the client is opened. In diesem Fall sucht der DynamicEndpoint auf Grundlage des Dienstvertrags nach dem Dienst.In this case, the DynamicEndpoint looks for the service based on the service contract. Der DynamicEndpoint führt die Suche standardmäßig über einen UdpDiscoveryEndpoint durch.The DynamicEndpoint conducts the search over a UdpDiscoveryEndpoint by default. Sobald ein Dienstendpunkt gefunden wurde, stellt der Client über die angegebene Bindung eine Verbindung mit dem Dienst her.Once it locates a service endpoint, the client connects to that service over the specified binding.

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.The client defines a method called InvokeCalculatorService that uses the DiscoveryClient class to search for services. Der DynamicEndpoint erbt vom ServiceEndpoint. Deshalb kann er an die InvokeCalculatorService-Methode übergeben werden.The DynamicEndpoint inherits from ServiceEndpoint, so it can be passed to the InvokeCalculatorService method. Im Beispiel wird dann mithilfe des DynamicEndpoint eine Instanz des CalculatorServiceClient erstellt und die verschiedenen Vorgänge des Rechnerdiensts aufgerufen.The example then uses the DynamicEndpoint to create an instance of CalculatorServiceClient and calls the various operations of the calculator service.

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 BeispielTo use this sample

  1. In diesem Beispiel werden HTTP-Endpunkte verwendet. Zur Ausführung des Beispiels müssen die richtigen URL-ACLs hinzugefügt werden.This sample uses HTTP endpoints and to run this sample, proper URL ACLs must be added. Weitere Informationen finden Sie unter Configuring HTTP and HTTPS.For more information, see Configuring HTTP and HTTPS. Durch die Ausführung des folgenden Befehls mit erweiterten Berechtigungen werden die entsprechenden ACLs hinzugefügt.Executing the following command at an elevated privilege should add the appropriate ACLs. Es empfiehlt sich, die Domäne und den Benutzernamen durch die folgenden Argumente zu ersetzen, wenn der Befehl nicht funktioniert.You may want to substitute your Domain and Username for the following arguments if the command does not work as is. netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

  2. Öffnen Sie Basic.sln mit Visual Studio 2012Visual Studio 2012, und erstellen Sie das Beispiel.Using Visual Studio 2012Visual Studio 2012, open the Basic.sln and build the sample.

  3. Führen Sie die SERVICE.EXE-Anwendung aus.Run the service.exe application.

  4. Führen Sie nach dem Starten des Diensts client.exe aus.After the service has started, run the client.exe.

  5. Beachten Sie, dass der Client den Dienst ermitteln konnte, ohne seine Adresse zu kennen.Observe that the client was able to find the service without knowing its address.

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your machine. Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, fahren Sie mit Windows Communication Foundation (WCF) und Windows Workflow Foundation (WF) Samples for .NET Framework 4 aller Windows Communication Foundation (WCF) herunterladen und WFWF Beispiele.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Dieses Beispiel befindet sich im folgenden Verzeichnis.This sample is located in the following directory.

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

Siehe auchSee Also