EndpunktadressenEndpoint Addresses

Jedem Endpunkt ist eine Adresse zugeordnet, um den Endpunkt suchen und identifizieren zu können.Every endpoint has an address associated with it, which is used to locate and identify the endpoint. Diese Adresse besteht hauptsächlich aus einem Uniform Resource Identifier (URI), der den Speicherort des Endpunkts angibt.This address consists primarily of a Uniform Resource Identifier (URI), which specifies the location of the endpoint. Die Endpunktadresse wird im Windows Communication Foundation (WCF)Windows Communication Foundation (WCF)-Programmierungsmodell durch die EndpointAddress-Klasse dargestellt, die eine optionale Identity-Eigenschaft für die Authentifizierung des Endpunkts durch andere Endpunkte, die Nachrichten mit ihm austauschen, sowie einen Satz optionaler Headers-Eigenschaften enthält, die eventuelle weitere SOAP-Header definieren, die für das Erreichen des Diensts erforderlich sind.The endpoint address is represented in the Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) programming model by the EndpointAddress class, which contains an optional Identity property that enables the authentication of the endpoint by other endpoints that exchange messages with it, and a set of optional Headers properties, which define any other SOAP headers required to reach the service. Die optionalen Header stellen zusätzliche und ausführlichere Adressinformationen bereit, um den Dienstendpunkt zu identifizieren oder mit ihm zu interagieren.The optional headers provide additional and more detailed addressing information to identify or interact with the service endpoint. Die Adresse eines Endpunkts wird während der Übertragung als WS-Adressierungsendpunktverweis (Endpoint Reference, EPR) dargestellt.The address of an endpoint is represented on the wire as a WS-Addressing endpoint reference (EPR).

URI-Struktur einer AdresseURI Structure of an Address

Der Adress-URI besteht für die meisten Transporte aus vier Teilen.The address URI for most transports has four parts. Der URI http://www.fabrikam.com:322/mathservice.svc/secureEndpoint setzt sich beispielsweise aus folgenden vier Teilen zusammen:For example, the four parts of the URI http://www.fabrikam.com:322/mathservice.svc/secureEndpoint can be itemized as follows:

  • Schema: http:Scheme: http:

  • Computer: www.fabrikam.comMachine: www.fabrikam.com

  • (optional) Port: 322(optional) Port: 322

  • Pfad: /mathservice.svc/secureEndpointPath: /mathservice.svc/secureEndpoint

Definieren einer Adresse für einen DienstDefining an Address for a Service

Die Endpunktadresse für einen Dienst kann entweder imperativ über Code oder deklarativ über die Konfiguration angegeben werden.The endpoint address for a service can be specified either imperatively using code or declaratively through configuration. 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 oder eine erneute Bereitstellung der Anwendung möglich.Keeping the binding and addressing information out of the code allows them to change without having to recompile or redeploy the application.

Definieren einer Adresse in der KonfigurationDefining an Address in Configuration

Verwenden Sie zum Definieren eines Endpunkts in einer Konfigurationsdatei der <Endpunkt > Element.To define an endpoint in a configuration file, use the <endpoint> element. Weitere Informationen und ein Beispiel finden Sie unter angeben einer Endpunktadresse.For details and an example, see Specifying an Endpoint Address.

Definieren einer Adresse im CodeDefining an Address in Code

Eine Endpunktadresse kann mit der EndpointAddress-Klasse im Code erstellt werden.An endpoint address can be created in code with the EndpointAddress class. Weitere Informationen und ein Beispiel finden Sie unter angeben einer Endpunktadresse.For details and an example, see Specifying an Endpoint Address.

Endpunkt in WSDLEndpoints in WSDL

Eine Endpunktadresse kann auch in WSDL (Web Services Description Language) als ein WS-Addressierungs-EPR-Element innerhalb des wsdl:port-Elements des entsprechenden Endpunkts dargestellt werden.An endpoint address can also be represented in WSDL as a WS-Addressing EPR element inside the corresponding endpoint's wsdl:port element. Der EPR enthält die Endpunktadresse sowie eventuelle Adresseigenschaften.The EPR contains the endpoint's address as well as any address properties. Weitere Informationen und ein Beispiel finden Sie unter angeben einer Endpunktadresse.For details and an example, see Specifying an Endpoint Address.

Mehrere IIS-Unterstützung in .NET Framework 3.5 bindenMultiple IIS Binding Support in .NET Framework 3.5

Internetdienstanbieter hosten oftmals viele Anwendungen auf demselben Server und derselben Website, um die Websitedichte zu erhöhen und die Gesamtkosten (TCO) zu senken.Internet service providers often host many applications on the same server and site to increase the site density and lower total cost of ownership. Diese Anwendungen werden i. d. R. an unterschiedliche Basisadressen gebunden.These applications are typically bound to different base addresses. Eine Internetinformationsdienste(IIS)-Website kann mehrere Anwendungen enthalten.An Internet Information Services (IIS) Web site can contain multiple applications. Auf die Anwendungen auf einer Website kann über eine oder mehrere IIS-Bindungen zugegriffen werden.The applications in a site can be accessed through one or more IIS bindings.

IIS-Bindungen stellen zwei Angaben bereit: ein Bindungsprotokoll und Bindungsinformationen.IIS bindings provide two pieces of information: a binding protocol, and binding information. Das Bindungsprotokoll definiert das Schema, das für die Kommunikation verwendet wird, und die Bindungsinformationen dienen dem Zugriff auf die Website.The binding protocol defines the scheme over which communication occurs, and binding information is the information used to access the site.

Das folgende Beispiel zeigt die Komponenten, die in einer IIS-Bindung enthalten sein können:The following example shows the components that can be present in an IIS binding:

  • Bindungsprotokoll: HTTPBinding protocol: HTTP

  • Bindungsinformationen: IP-Adresse, Anschluss, HostheaderBinding Information: IP Address, Port, Host header

IIS kann mehrere Bindungen für jede Site angeben, was zu mehreren Basisadressen für jedes Schema führt.IIS can specify multiple bindings for each site, which results in multiple base addresses for each scheme. Vor .NET Framework 3,5.NET Framework 3.5 wurde die Verwendung mehrerer Adressen für ein Schema von WCFWCF nicht unterstützt. Wurden dennoch mehrere Adressen angegeben, wurde bei der Aktivierung eine ArgumentException.Prior to .NET Framework 3,5.NET Framework 3.5, WCFWCF did not support multiple addresses for a schema and, if they were specified, threw a ArgumentException during activation.

.NET Framework 3,5.NET Framework 3.5 ermöglicht es Internetdienstanbietern, mehrere Anwendungen mit unterschiedlichen Basisadressen für dasselbe Schema auf derselben Website zu hosten.The .NET Framework 3,5.NET Framework 3.5 enables Internet service providers to host multiple applications with different base addresses for the same scheme on the same site.

Eine Website kann beispielsweise die folgenden Basisadressen enthalten:For example, a site could contain the following base addresses:

Bei .NET Framework 3,5.NET Framework 3.5 geben Sie in der Konfigurationsdatei auf der AppDomain-Ebene einen Präfixfilter an.With .NET Framework 3,5.NET Framework 3.5, you specify a prefix filter at the AppDomain level in the configuration file. Dazu mit der <BaseAddressPrefixFilters > Element, das eine Liste mit Präfixen enthält.You do this with the <baseAddressPrefixFilters> element, which contains a list of prefixes. Die eingehenden, von IIS angegebenen Basisadressen werden anhand der optionalen Präfixliste gefiltert.The incoming base addresses, supplied by IIS, are filtered based on the optional prefix list. Standardmäßig werden alle Adressen übergeben, wenn ein Präfix nicht angegeben ist.By default, when a prefix is not specified, all addresses are passed through. Wenn die Präfixergebnisse angegeben werden, wird nur die Basisadresse übergeben, die dem Schema entspricht.Specifying the prefix results in only the matching base address for that scheme to be passed through.

Es folgt ein Beispiel für Konfigurationscode, der die Präfixfilter verwendet.The following is an example of configuration code that uses the prefix filters.

<system.serviceModel>  
  <serviceHostingEnvironment>  
     <baseAddressPrefixFilters>  
        <add prefix="net.tcp://payroll.myorg.com:8000"/>  
        <add prefix="http://shipping.myorg.com:8000"/>  
    </baseAddressPrefixFilters>  
  </serviceHostingEnvironment>  
</system.serviceModel>  

Im vorangehenden Beispiel sind net.tcp://payroll.myorg.com:8000 und http://shipping.myorg.com:8000 die einzigen Basisadressen (für die entsprechenden Schemas), die übergeben werden.In the preceding example, net.tcp://payroll.myorg.com:8000 and http://shipping.myorg.com:8000 are the only base addresses, for their respective schemes, which are passed through.

Der baseAddressPrefixFilter unterstützt keine Platzhalter.The baseAddressPrefixFilter does not support wildcards.

Die von IIS angegebenen Basisadressen verfügen möglicherweise über Adressen, die an andere, nicht in der baseAddressPrefixFilters-Liste vorhandene Schemas gebunden sind.The base addresses supplied by IIS may have addresses bound to other schemes not present in baseAddressPrefixFilters list. Diese Adressen werden nicht herausgefiltert.These addresses are not filtered out.

Unterstützung für mehrere IIS-Bindungen in .NET Framework 4 und höherMultiple IIS Binding Support in .NET Framework 4 and later

Ab .NET 4 können Sie die Unterstützung für mehrere Bindungen in IIS aktivieren, ohne eine Basisadresse auswählen zu müssen. Legen Sie dazu die Einstellung ServiceHostingEnvironment von MultipleSiteBindingsEnabled auf True fest.Starting in .NET 4, you can enable support for multiple bindings in IIS without having to pick a single base address, by setting ServiceHostingEnvironment’s MultipleSiteBindingsEnabled setting to true. Die Unterstützung ist auf HTTP-Protokollschemas begrenzt.This support is limited to HTTP protocol schemes.

Im folgenden ist ein Beispiel für Konfigurationscode, die bei MultipleSiteBindingsEnabled verwendet <ServiceHostingEnvironment >.The following is an example of configuration code that uses multipleSiteBindingsEnabled on <serviceHostingEnvironment>.

<system.serviceModel>  
  <serviceHostingEnvironment multipleSiteBindingsEnabled="true" >  
  </serviceHostingEnvironment>  
</system.serviceModel>  

Wenn mehrere Websitebindungen mit dieser Einstellung aktiviert wurden, werden alle Einstellungen von baseAddressPrefixFilters sowohl für HTTP-Protokolle als auch für andere Protokolle ignoriert.Any baseAddressPrefixFilters settings are ignored, for both HTTP and non-HTTP protocols, when multiple site bindings are enabled using this setting.

Weitere Informationen und Beispiele finden Sie unter unterstützen mehrerer IIS-Sitebindungen und MultipleSiteBindingsEnabled.For details and examples, see Supporting Multiple IIS Site Bindings and MultipleSiteBindingsEnabled.

Erweitern der Adressierung in WCF-DienstenExtending Addressing in WCF Services

Das Standardadressierungsmodell von WCFWCF-Diensten verwendet den Endpunktadress-URI für die folgenden Zwecke:The default addressing model of WCFWCF services uses the endpoint address URI for the following purposes:

  • Um die Abhöradresse des Diensts anzugeben, d. h. den Speicherort, den der Endpunkt auf Nachrichten abhörtTo specify the service listening address, the location at which the endpoint listens for messages,

  • Um den SOAP-Adressfilter anzugeben, d. h. die Adresse, die ein Endpunkt als SOAP-Header erwartetTo specify the SOAP address filter, the address an endpoint expects as a SOAP header.

Die Werte für beide Situationen können separat angegeben werden. Dadurch werden mehrere Adressierungserweiterungen für nützliche Szenarien möglich:The values for each of these purposes can be specified separately, allowing several extensions of addressing that cover useful scenarios:

  • SOAP-Vermittler: Eine von einem Client gesendete Nachricht durchläuft einen oder mehrere zusätzliche Dienste, die die Nachricht verarbeiten, bevor sie ihr endgültiges Ziel erreicht.SOAP intermediaries: a message sent by a client traverses one or more additional services that process the message before it reaches its final destination. SOAP-Vermittler können verschiedene Aufgaben ausführen, z. B. Caching, Routing, Lastenausgleich oder Schemavalidierung für Nachrichten.SOAP intermediaries can perform various tasks, such as caching, routing, load-balancing, or schema validation on the messages. Dieses Szenario wird durch das Senden von Nachrichten an eine separate physische Adresse erreicht (via), die auf den Vermittler verweist, anstatt nur an eine logische Adresse (wsa:To), die auf das endgültige Ziel verweist.This scenario is accomplished by sending messages to a separate physical address (via) that targets the intermediary rather than just to a logical address (wsa:To) that targets the ultimate destination.

  • Die Abhöradresse des Endpunkts ist ein privater URI und wird auf einen anderen Wert als seine listenURI-Eigenschaft festgelegt.The listening address of the endpoint is a private URI and is set to a different value than its listenURI property.

Nachrichten sollten zunächst an die Transportadresse gesendet werden, die von via angegeben wird, bevor sie an eine andere Remoteadresse gesendet werden, die vom to-Parameter angegeben wird und an der sich der Dienst befindet.The transport address that the via specifies is the location to which a message should initially be sent on its way to some other remote address specified by the to parameter at which the service is located. In den meisten Internetszenarien sind der via-URI der Uri-Eigenschaft und die endgültige to-Adresse des Diensts identisch.In most Internet scenarios, the via URI is the same as the Uri property of the final to address of the service. Eine Unterscheidung zwischen den beiden Adressen ist nur beim manuellen Routing erforderlich.You only distinguish between these two addresses when you must do manual routing.

AdressierungsheaderAddressing Headers

Ein Endpunkt kann neben seinem Basis-URI von einem oder mehreren SOAP-Headern adressiert werden.An endpoint can be addressed by one or more SOAP headers in addition to its basic URI. Dies ist beispielsweise in SOAP-Vermittlerszenarien nützlich, in denen ein Endpunkt es erfordert, dass seine Clients SOAP-Header einfügen, die sich an Vermittler richten.One set of scenarios where this is useful is a set of SOAP intermediary scenarios where an endpoint requires clients of that endpoint to include SOAP headers targeted at intermediaries.

Sie können benutzerdefinierte Adressheader auf zweierlei Weise definieren – entweder mit Code oder einer Konfiguration:You can define custom address headers in two ways—by using either code or configuration:

  • Im Code werden benutzerdefinierte Adressheader mithilfe der AddressHeader-Klasse erstellt und dann bei der Erstellung einer EndpointAddress verwendet.In code, create custom address headers by using the AddressHeader class, and then used in the construction of an EndpointAddress.

  • In der benutzerdefinierten Konfiguration <Header > werden als untergeordnete Elemente des angegebenen der <Endpunkt > Element.In configuration, custom <headers> are specified as children of the <endpoint> element.

Die Konfiguration ist im Allgemeinen dem Code vorzuziehen, da sie es Ihnen ermöglicht, die Header nach der Bereitstellung zu ändern.Configuration is generally preferable to code, as it allows you to change the headers after deployment.

Benutzerdefinierte AbhöradressenCustom Listening Addresses

Sie können die Abhöradresse auf einen anderen Wert als den URI des Endpunkts festlegen.You can set the listening address to a different value than the endpoint’s URI. Das ist in Vermittlerszenarios nützlich, in denen die SOAP-Adresse, die verfügbar gemacht werden soll, die eines öffentlichen SOAP-Vermittlers ist, während die Adresse, an der der Endpunkt lauscht, eine private Netzwerkadresse ist.This is useful in intermediary scenarios where the SOAP address to be exposed is that of a public SOAP intermediary, whereas the address where the endpoint actually listens is a private network address.

Sie können eine benutzerdefinierte Abhöradresse angeben, indem Sie entweder Code oder eine Konfiguration verwenden:You can specify a custom listening address by using either code or configuration:

  • Im Code geben Sie eine benutzerdefinierte Abhöradresse durch Hinzufügen einer ClientViaBehavior-Klasse zur Verhaltensauflistung des Endpunkts an.In code, specify a custom listening address by adding a ClientViaBehavior class to the endpoint’s behavior collection.

  • Geben Sie in der Konfiguration, die eine benutzerdefinierte abhöradresse mit der ListenUri Attribut des Diensts <Endpunkt > Element.In configuration, specify a custom listening address with the ListenUri attribute of the service <endpoint> element.

Benutzerdefinierter SOAP-AdressenfilterCustom SOAP Address Filter

Der Uri wird in Verbindung mit einer beliebigen Headers-Eigenschaft zur Definition des SOAP-Adressfilters eines Endpunkts verwendet (AddressFilter).The Uri is used in conjunction with any Headers property to define an endpoint’s SOAP address filter (AddressFilter). Standardmäßig prüft dieser Filter, ob eine eingehende Nachricht über einen To-Nachrichtenheader verfügt, der mit dem URI des Endpunkts übereinstimmt, und ob alle erforderlichen Endpunktheader in der Nachricht vorhanden sind.By default, this filter verifies that an incoming message has a To message header that matches the endpoint’s URI and that all of the required endpoint headers are present in the message.

In einigen Szenarien empfängt ein Endpunkt alle Nachrichten, die mit dem zugrunde liegenden Transport ankommen, und nicht nur die mit dem entsprechenden To-Header.In some scenarios, an endpoint receives all messages that arrive on the underlying transport, and not just those with the appropriate To header. Um dies zu aktivieren, kann der Benutzer die MatchAllMessageFilter-Klasse verwenden.To enable this, the user can use the MatchAllMessageFilter class.

Siehe auchSee Also

Angeben einer EndpunktadresseSpecifying an Endpoint Address
Dienstidentität und AuthentifizierungService Identity and Authentication