Übersicht über die EndpunkterstellungEndpoint Creation Overview

Die gesamte Kommunikation mit einem Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) -Dienst verläuft über die Endpunkte des Diensts.All communication with a Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) service occurs through the endpoints of the service. Endpunkte ermöglichen Clients den Zugriff auf die Funktionalität, die ein WCFWCF-Dienst bereitstellt.Endpoints provide the clients access to the functionality that a WCFWCF service offers. In diesem Abschnitt wird die Struktur eines Endpunkts beschrieben und dargestellt, wie ein Endpunkt in einer Konfiguration oder im Code definiert wird.This section describes the structure of an endpoint and outlines how to define an endpoint in configuration and in code.

Die Struktur eines EndpunktsThe Structure of an Endpoint

Jeder Endpunkt beinhaltet eine Adresse, die angibt, wo sich der Endpunkt befindet, eine Bindung, die angibt, wie ein Client mit dem Endpunkt kommunizieren kann und einen Vertrag angibt, der die verfügbaren Methoden identifiziert.Each endpoint contains an address that indicates where to find the endpoint, a binding that specifies how a client can communicate with the endpoint, and a contract that identifies the methods available.

  • Adresse.Address. Die Adresse gewährleistet eine eindeutige Identifizierung des Endpunkts und teilt potenziellen Consumern den Standort des Diensts mit.The address uniquely identifies the endpoint and tells potential consumers where the service is located. Die Adresse wird im WCFWCF-Objektmodell durch die EndpointAddress-Adresse dargestellt, die einen Uniform Resource Identifier (URI) und Adresseigenschaften beinhaltet, die wiederum eine Identität, einige Web Services Description Language (WSDL)-Elemente und eine Auflistung der optionalen Header enthalten.It is represented in the WCFWCF object model by the EndpointAddress address, which contains a Uniform Resource Identifier (URI) and address properties that include an identity, some Web Services Description Language (WSDL) elements, and a collection of optional headers. Die optionalen Header stellen zusätzliche ausführliche Adressinformationen bereit, um den Endpunkt zu identifizieren oder damit zu interagieren.The optional headers provide additional detailed addressing information to identify or interact with the endpoint. Weitere Informationen finden Sie unterFor more information, seeAngeben einer Endpunktadresse. Specifying an Endpoint Address.

  • Binden von.Binding. Die Bindung gibt an, wie eine Kommunikation mit dem Endpunkt stattfindet.The binding specifies how to communicate with the endpoint. Die Bindung gibt an, wie der Endpunkt mit der Außenwelt kommuniziert (einschließlich des zu verwendenden Transportprotokolls, beispielsweise TCP oder HTTP), welche Codierung für die Nachrichten zu verwenden ist (beispielsweise Text- oder Binärcodierung) und welche Sicherheitsanforderungen erforderlich sind (beispielsweise Secure Sockets Layer [SSL] oder SOAP-Nachrichtensicherheit).The binding specifies how the endpoint communicates with the world, including which transport protocol to use (for example, TCP or HTTP), which encoding to use for the messages (for example, text or binary), and which security requirements are necessary (for example, Secure Sockets Layer [SSL] or SOAP message security). Weitere Informationen finden Sie unterFor more information, seeVerwenden von Bindungen, um Dienste und Clients konfigurieren. Using Bindings to Configure Services and Clients.

  • Dienstvertrag.Service contract. Der Dienstvertrag zeigt, welche Funktionen der Endpunkt dem Client zur Verfügung stellt.The service contract outlines what functionality the endpoint exposes to the client. In einem Vertrag wird Folgendes angegeben: die Vorgänge, die ein Client aufrufen kann, die Form der Nachricht und der Typ der Eingabeparameter oder die Daten, die zum Aufrufen des Vorgangs erforderlich sind, sowie die Art der Verarbeitung oder die Antwortnachricht, die der Client erwarten kann.A contract specifies the operations that a client can call, the form of the message and the type of input parameters or data required to call the operation, and the kind of processing or response message the client can expect. Drei grundlegende Vertragstypen entsprechen grundlegenden Nachrichtenaustauschmustern: Datagramm (unidirektional), Anforderung/Antwort und Duplex (bidirektional).Three basic types of contracts correspond to basic message exchange patterns (MEPs): datagram (one-way), request/reply, and duplex (bidirectional). Für den Dienstvertrag können zudem Daten- und Nachrichtenverträge verwendet werden, um beim Zugriff bestimmte Datentypen und Nachrichtenformate zu fordern.The service contract can also employ data and message contracts to require specific data types and message formats when being accessed. Weitere Informationen finden Sie unterFor more information aboutzum Definieren eines Dienstvertrags finden Sie unter Entwerfen von Dienstverträgen. how to define a service contract, see Designing Service Contracts. Ein Client kann ggf. auch dazu aufgefordert werden, einen vom Dienst definierten Vertrag zu implementieren (wird als Rückrufvertrag bezeichnet), um vom Dienst in einem Duplexnachrichten-Austauschmuster Nachrichten zu empfangen.Note that a client may also be required to implement a service-defined contract, called a callback contract, to receive messages from the service in a duplex MEP. Weitere Informationen finden Sie unterFor more information, seeDuplexdienste. Duplex Services.

Der Endpunkt für einen Dienst kann entweder verbindlich durch Verwenden von Code oder deklarativ durch Konfiguration angegeben werden.The endpoint for a service can be specified either imperatively by using code or declaratively through configuration. Wenn keine Endpunkte angegeben sind, stellt die Runtime Standardendpunkte bereit, indem ein Standardendpunkt für alle Basisadressen in jedem Dienstvertrag, der vom Dienst implementiert wird, hinzugefügt wird.If no endpoints are specified then the runtime provides default endpoints by adding one default endpoint for each base address for each service contract implemented by the service. Die Definition von Endpunkten im Code ist normalerweise nicht geeignet, da die Bindungen und Adressen für einen bereitgestellten Dienst sich in der Regel von denen unterscheiden, die während der Entwicklung des Diensts verwendet werden.Defining endpoints in code is usually not practical because the bindings and addresses for a deployed service are typically different from those used while the service is being developed. Im Allgemeinen ist es praktischer, Dienstendpunkte nicht mit Code, sondern mit Konfiguration zu definieren.Generally, it is more practical to define service endpoints using configuration rather than code. Werden die Bindung und die Adressinformationen nicht in den Code integriert, ist eine Änderung ohne Neukompilierung und erneute Bereitstellung der Anwendung möglich.Keeping the binding and addressing information out of the code allows them to change without having to recompile and redeploy the application.

Hinweis

Beim Hinzufügen eines Dienstendpunkts, der einen Identitätswechsel ausführt, muss entweder eine der AddServiceEndpoint-Methoden oder die GetContract(Type, Type)-Methode verwendet werden, um den Vertrag ordnungsgemäß in ein neues ServiceDescription-Objekt zu laden.When adding a service endpoint that performs impersonation, you must either use one of the AddServiceEndpoint methods or the GetContract(Type, Type) method to properly load the contract into a new ServiceDescription object.

Definieren von Endpunkten in CodeDefining Endpoints in Code

Im folgenden Beispiel wird die Angabe eines Endpunkts in Code veranschaulicht:The following example illustrates how to specify an endpoint in code with the following:

  • Definieren Sie einen Vertrag für eine IEcho Typ des Diensts, der sich bei einem Namen und mit der Antwort Echo akzeptiert "Hello <Name >!".Define a contract for an IEcho type of service that accepts someone's name and echo with the response "Hello <name>!".

  • Implementieren Sie einen Echo-Dienst des Typs, der durch den IEcho-Vertrag definiert wird.Implement an Echo service of the type defined by the IEcho contract.

  • Geben Sie für den Dienst die Endpunktadresse http://localhost:8000/Echo an.Specify an endpoint address of http://localhost:8000/Echo for the service.

  • Konfigurieren Sie den Echo-Dienst mithilfe einer WSHttpBinding-Bindung.Configure the Echo service using a WSHttpBinding binding.

Namespace Echo  
{  
   // Define the contract for the IEcho service   
   [ServiceContract]  
   public interface IEcho  
   {  
       [OperationContract]  
       String Hello(string name)  
   }  

   // Create an Echo service that implements IEcho contract  
   class Echo : IEcho  
   {  
      public string Hello(string name)  
      {  
         return "Hello" + name + "!";  
      }  
      public static void Main ()  
      {  
          //Specify the base address for Echo service.  
          Uri echoUri = new Uri("http://localhost:8000/");  

          //Create a ServiceHost for the Echo service.  
          ServiceHost serviceHost = new ServiceHost(typeof(Echo),echoUri);  

          // Use a predefined WSHttpBinding to configure the service.  
          WSHttpBinding binding = new WSHttpBinding();  

          // Add the endpoint for this service to the service host.  
          serviceHost.AddServiceEndpoint(  
             typeof(IEcho),   
             binding,   
             echoUri  
           );  

          // Open the service host to run it.  
          serviceHost.Open();  
     }  
  }  
}  
' Define the contract for the IEcho service  
    <ServiceContract()> _  
    Public Interface IEcho  
        <OperationContract()> _  
        Function Hello(ByVal name As String) As String  
    End Interface  

' Create an Echo service that implements IEcho contract  
    Public Class Echo   
        Implements IEcho  
        Public Function Hello(ByVal name As String) As String _  
 Implements ICalculator.Hello  
            Dim result As String = "Hello" + name + "!"  
            Return result  
        End Function  

' Specify the base address for Echo service.  
Dim echoUri As Uri = New Uri("http://localhost:8000/")  

' Create a ServiceHost for the Echo service.  
Dim svcHost As ServiceHost = New ServiceHost(GetType(HelloWorld), echoUri)  

' Use a predefined WSHttpBinding to configure the service.  
Dim binding As New WSHttpBinding()  

' Add the endpoint for this service to the service host.  
serviceHost.AddServiceEndpoint(GetType(IEcho), binding, echoUri)  

' Open the service host to run it.  
serviceHost.Open()  

Hinweis

Der Diensthost wird mit einer Basisadresse erstellt. Anschließend wird der Rest der Adresse relativ zur Basisadresse als Teil eines Endpunkts angegeben.The service host is created with a base address and then the rest of the address, relative to the base address, is specified as part of an endpoint. Diese Partitionierung der Adresse ermöglicht die einfachere Definition von mehreren Endpunkten für Dienste an einem Host.This partitioning of the address allows multiple endpoints to be defined more conveniently for services at a host.

Hinweis

Eigenschaften von ServiceDescription in der Dienstanwendung dürfen nicht im Anschluss an die OnOpening-Methode auf ServiceHostBase geändert werden.Properties of ServiceDescription in the service application must not be modified subsequent to the OnOpening method on ServiceHostBase. Einige Member, wie die Credentials-Eigenschaft und die AddServiceEndpoint-Methoden auf ServiceHostBase und ServiceHost, lösen eine Ausnahme aus, wenn eine Änderung über diesen Punkt hinaus stattfindet.Some members, such as the Credentials property and the AddServiceEndpoint methods on ServiceHostBase and ServiceHost, throw an exception if modified past that point. Andere Member können geändert werden, wobei das Ergebnis jedoch nicht definiert ist.Others permit you to modify them, but the result is undefined.

Ähnlich verhält es sich mit den ServiceEndpoint-Werten, die auf dem Client nach dem Aufruf von OnOpening auf ChannelFactory nicht geändert werden dürfen.Similarly, on the client the ServiceEndpoint values must not be modified after the call to OnOpening on the ChannelFactory. Die Credentials-Eigenschaft löst eine Ausnahme aus, wenn sie über diesen Punkt hinaus geändert wird.The Credentials property throws an exception if modified past that point. Die anderen Clientbeschreibungswerte können ohne Fehler geändert werden, aber das Ergebnis ist nicht definiert.The other client description values can be modified without error, but the result is undefined.

Sowohl für den Dienst als auch den Client wird empfohlen, die Beschreibung vor dem Aufruf von Open zu ändern.Whether for the service or client, it is recommended that you modify the description prior to calling Open.

Definieren von Endpunkten in der KonfigurationDefining Endpoints in Configuration

Beim Erstellen einer Anwendung sollen dem Administrator, der die Anwendung bereitstellt, Entscheidungen häufig verzögert mitgeteilt werden.When creating an application, you often want to defer decisions to the administrator who is deploying the application. Beispielsweise weiß man häufig nicht, welche Dienstadresse (URI) verwendet wird.For example, there is often no way of knowing in advance what a service address (a URI) will be. Anstatt eine Adresse fest zu programmieren, sollte diese Aufgabe einem Administrator nach dem Erstellen eines Diensts übergeben werden.Instead of hard-coding an address, it is preferable to allow an administrator to do so after creating a service. Diese Flexibilität wird durch Konfiguration ermöglicht.This flexibility is accomplished through configuration. Weitere Informationen finden Sie unter Konfigurieren von Services.For details, see Configuring Services.

Hinweis

Verwenden der ServiceModel Metadata Utility Tool (Svcutil.exe) mit der /config: Filename[,Filename ] wechseln Sie zu Erstellen Sie schnell Konfigurationsdateien.Use the ServiceModel Metadata Utility Tool (Svcutil.exe) with the /config:filename[,filename] switch to quickly create configuration files.

Verwenden von StandardendpunktenUsing Default Endpoints

Wenn im Code oder in der Konfiguration keine Endpunkte angegeben sind, stellt die Runtime Standardendpunkte bereit, indem ein Standardendpunkt für alle Basisadressen in jedem Dienstvertrag, der vom Dienst implementiert wird, hinzugefügt wird.If no endpoints are specified in code or in configuration then the runtime provides default endpoints by adding one default endpoint for each base address for each service contract implemented by the service. Die Basisadresse kann im Code oder in der Konfiguration angegeben werden, und die Standardendpunkte werden hinzugefügt, wenn Open() auf dem ServiceHost aufgerufen wird.The base address can be specified in code or in configuration, and the default endpoints are added when Open() is called on the ServiceHost. Dieses Beispiel entspricht dem Beispiel aus dem vorherigen Abschnitt. Da aber keine Endpunkte angegeben sind, werden die Standardendpunkte hinzugefügt.This example is the same example from the previous section, but since no endpoints are specified, the default endpoints are added.

Namespace Echo  
{  
   // Define the contract for the IEcho service   
   [ServiceContract]  
   Interface IEcho  
   {  
       [OperationContract]  
       String Hello(string name)  
   }  

   // Create an Echo service that implements IEcho contract  
   Class Echo : IEcho  
   {  
      Public string Hello(string name)  
      {  
         return "Hello" + name + "!";  
      }  
      static void Main ()  
      {  
          //Specify the base address for Echo service.  
          Uri echoUri = new Uri("http://localhost:8000/");  

          //Create a ServiceHost for the Echo service.  
          ServiceHost serviceHost = new ServiceHost(typeof(Echo),echoUri);  

          // Open the service host to run it. Default endpoints  
          // are added when the service is opened.  
          serviceHost.Open();  
     }  
  }  
}  
' Define the contract for the IEcho service  
    <ServiceContract()> _  
    Public Interface IEcho  
        <OperationContract()> _  
        Function Hello(ByVal name As String) As String  
    End Interface  

' Create an Echo service that implements IEcho contract  
    Public Class Echo   
        Implements IEcho  
        Public Function Hello(ByVal name As String) As String _  
 Implements ICalculator.Hello  
            Dim result As String = "Hello" + name + "!"  
            Return result  
        End Function  

' Specify the base address for Echo service.  
Dim echoUri As Uri = New Uri("http://localhost:8000/")  

' Open the service host to run it. Default endpoints  
' are added when the service is opened.  
serviceHost.Open()  

Wenn Endpunkte explizit bereitgestellt werden, können die Standardpunkte dennoch hinzugefügt werden, indem AddDefaultEndpoints auf dem ServiceHost aufgerufen wird, bevor Open aufgerufen wird.If endpoints are explicitly provided, the default endpoints can still be added by calling AddDefaultEndpoints on the ServiceHost before calling Open. Weitere Informationen finden Sie unterFor more information aboutStandardendpunkte, finden Sie unter vereinfachte Konfiguration und vereinfachte Konfiguration für WCF-Dienste. default endpoints, see Simplified Configuration and Simplified Configuration for WCF Services.

Siehe auchSee Also

Implementieren von DienstverträgenImplementing Service Contracts