Adresy koncových bodů

Každý koncový bod má přidruženou adresu, která slouží k vyhledání a identifikaci koncového bodu. Tato adresa se skládá především z identifikátoru URI (Uniform Resource Identifier), který určuje umístění koncového bodu. Adresa koncového bodu je reprezentována v programovacím modelu EndpointAddress WCF (Windows Communication Foundation) třídou, která obsahuje volitelnou Identity vlastnost, která umožňuje ověřování koncového bodu jinými koncovými body, které s ním vyměňují zprávy, a sadu volitelných Headers vlastností, které definují všechny další hlavičky SOAP potřebné pro přístup ke službě. Volitelné hlavičky poskytují další a podrobnější informace o adresování k identifikaci nebo interakci s koncovým bodem služby. Adresa koncového bodu je reprezentována na drátu jako odkaz koncového bodu WS-Adresování (EPR).

Struktura identifikátoru URI adresy

Identifikátor URI adresy pro většinu přenosů má čtyři části. Například čtyři části identifikátoru URI http://www.fabrikam.com:322/mathservice.svc/secureEndpoint lze itemizovat takto:

  • Schéma: http:

  • Stroj: www.fabrikam.com

  • (volitelné) Port: 322

  • Cesta: /mathservice.svc/secureEndpoint

Definování adresy pro službu

Adresu koncového bodu pro službu je možné zadat buď imperativním způsobem pomocí kódu, nebo deklarativní prostřednictvím konfigurace. Definování koncových bodů v kódu obvykle není praktické, protože vazby a adresy nasazené služby se obvykle liší od těch, které se používají při vývoji služby. Obecně je vhodnější definovat koncové body služby pomocí konfigurace místo kódu. Udržování vazby a adresování informací mimo kód jim umožňuje změnit, aniž by bylo nutné aplikaci znovu zkompilovat nebo znovu nasadit.

Definování adresy v konfiguraci

K definování koncového bodu v konfiguračním souboru použijte prvek koncového <bodu> . Podrobnosti a příklad najdete v tématu Zadání adresy koncového bodu.

Definování adresy v kódu

Adresu koncového bodu je možné vytvořit v kódu s EndpointAddress třídou. Podrobnosti a příklad najdete v tématu Zadání adresy koncového bodu.

Koncové body ve WSDL

Adresa koncového bodu může být také reprezentována ve WSDL jako element EPR ws-Address uvnitř elementu odpovídajícího koncového wsdl:port bodu. EPR obsahuje adresu koncového bodu a také všechny vlastnosti adresy. Podrobnosti a příklad najdete v tématu Zadání adresy koncového bodu.

Podpora více vazeb služby IIS v rozhraní .NET Framework 3.5

Poskytovatelé internetových služeb často hostují mnoho aplikací na stejném serveru a webu, aby zvýšili hustotu webu a snížili celkové náklady na vlastnictví. Tyto aplikace jsou obvykle vázány na různé základní adresy. Web Internetová informační služba (IIS) může obsahovat více aplikací. K aplikacím na webu je možné přistupovat prostřednictvím jedné nebo více vazeb služby IIS.

Vazby služby IIS poskytují dva informace: protokol vazby a informace o vazbě. Protokol vazby definuje schéma, ve kterém probíhá komunikace, a informace o vazbě jsou informace používané pro přístup k webu.

Následující příklad ukazuje komponenty, které mohou být přítomny ve vazbě služby IIS:

  • Protokol vazby: HTTP

  • Informace o vazbě: IP adresa, port, hlavička hostitele

Služba IIS může pro každou lokalitu zadat více vazeb, což má za následek více základních adres pro každé schéma. Před rozhraním .NET Framework 3.5 wcf nepodporuje více adres pro schéma a pokud byly zadány, hodily ArgumentException během aktivace několik adres.

Rozhraní .NET Framework 3.5 umožňuje poskytovatelům internetových služeb hostovat více aplikací s různými základními adresami pro stejné schéma na stejném webu.

Například lokalita může obsahovat následující základní adresy:

  • http://payroll.myorg.com/Service.svc

  • http://shipping.myorg.com/Service.svc

V rozhraní .NET Framework 3.5 zadáte v konfiguračním souboru filtr předpony na úrovni AppDomain. Provedete to pomocí elementu <baseAddressPrefixFilters> , který obsahuje seznam předpon. Příchozí základní adresy zadané službou IIS se filtrují na základě volitelného seznamu předpon. Ve výchozím nastavení platí, že pokud není zadána předpona, předají se všechny adresy. Zadání předpony má za následek pouze odpovídající základní adresu pro toto schéma, které má být předáno.

Následuje příklad konfiguračního kódu, který používá filtry předpon.

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

V předchozím příkladu net.tcp://payroll.myorg.com:8000 jsou http://shipping.myorg.com:8000 jedinými základními adresami pro jejich příslušná schémata, která se předávají.

Nepodporuje baseAddressPrefixFilter zástupné kóty.

Základní adresy zadané službou IIS můžou obsahovat adresy vázané na jiná schémata, která nejsou v baseAddressPrefixFilters seznamu. Tyto adresy se nevyfiltrují.

Podpora více vazeb služby IIS v rozhraní .NET Framework 4 a novějším

Počínaje rozhraním .NET 4 můžete povolit podporu více vazeb ve službě IIS, aniž byste museli vybrat jednu základní adresu nastavením ServiceHostingEnvironmentMultipleSiteBindingsEnabled na hodnotu true. Tato podpora je omezená na schémata protokolu HTTP.

Následuje příklad konfiguračního kódu, který používá multipleSiteBindingsEnabled v serviceHostingEnvironment>.<

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

Všechna nastavení baseAddressPrefixFilters se ignorují pro protokoly HTTP i jiné protokoly než HTTP, pokud je pomocí tohoto nastavení povoleno více vazeb webu.

Podrobnosti a příklady naleznete v tématu Podpora více vazeb webu služby IIS a MultipleSiteBindingsEnabled.

Rozšíření adresování ve službách WCF

Výchozí model adresování služeb WCF používá identifikátor URI adresy koncového bodu pro následující účely:

  • Pokud chcete zadat adresu naslouchání služby, umístění, ve kterém koncový bod naslouchá zprávám,

  • Pokud chcete zadat filtr adres SOAP, adresa, kterou koncový bod očekává jako hlavičku SOAP.

Hodnoty pro každý z těchto účelů je možné zadat samostatně, což umožňuje několik rozšíření adres, která pokrývají užitečné scénáře:

  • Zprostředkovatelé PROTOKOLU SOAP: Zpráva odeslaná klientem prochází jednou nebo více dalšími službami, které zprávu zpracovávají před dosažením konečného cíle. Zprostředkovatelé SOAP můžou provádět různé úlohy, jako je ukládání do mezipaměti, směrování, vyrovnávání zatížení nebo ověřování schématu u zpráv. Tento scénář se dosahuje odesláním zpráv na samostatnou fyzickou adresu (via), která cílí na zprostředkující místo na logickou adresu (wsa:To), která cílí na konečný cíl.

  • Adresa naslouchání koncového bodu je privátní identifikátor URI a je nastaven na jinou hodnotu než jeho listenURI vlastnost.

Přenosová adresa, kterou určuje, je umístění, via do kterého má být zpráva původně odeslána na jinou vzdálenou adresu určenou to parametrem, na kterém se služba nachází. Ve většině internetových scénářů via je identifikátor URI stejný jako Uri vlastnost konečné to adresy služby. Mezi těmito dvěma adresami můžete rozlišovat pouze v případech, kdy je nutné provést ruční směrování.

Hlavičky adresování

Koncový bod může kromě základního identifikátoru URI adresovat také jedna nebo více hlaviček SOAP. Jednou ze scénářů, kdy je to užitečné, je sada zprostředkujících scénářů PROTOKOLU SOAP, kdy koncový bod vyžaduje, aby klienti tohoto koncového bodu zahrnuli hlavičky SOAP cílené na zprostředkovatele.

Vlastní hlavičky adres můžete definovat dvěma způsoby – pomocí kódu nebo konfigurace:

  • V kódu vytvořte vlastní hlavičky adres pomocí AddressHeader třídy a pak se používají při vytváření .EndpointAddress

  • V konfiguraci se vlastní hlavičky> zadají jako podřízené položky elementu koncového< bodu>.<

Konfigurace je obecně vhodnější než kód, protože umožňuje změnit hlavičky po nasazení.

Vlastní adresy naslouchání

Adresu naslouchání můžete nastavit na jinou hodnotu než identifikátor URI koncového bodu. To je užitečné v zprostředkovaných scénářích, kdy je adresa SOAP, která má být zpřístupněna, veřejnou zprostředkovateli SOAP, zatímco adresa, kde koncový bod skutečně naslouchá, je privátní síťová adresa.

Vlastní adresu naslouchání můžete zadat pomocí kódu nebo konfigurace:

  • V kódu zadejte vlastní adresu naslouchání přidáním ClientViaBehavior třídy do kolekce chování koncového bodu.

  • V konfiguraci zadejte vlastní adresu naslouchání s ListenUri atributem elementu koncového bodu> služby<.

Vlastní filtr adres SOAP

Používá Uri se ve spojení s libovolnou Headers vlastností k definování filtru adresy SOAP koncového bodu (AddressFilter). Ve výchozím nastavení tento filtr ověřuje, že příchozí zpráva obsahuje hlavičku To zprávy, která odpovídá identifikátoru URI koncového bodu a že jsou ve zprávě přítomny všechny hlavičky požadovaného koncového bodu.

V některých scénářích obdrží koncový bod všechny zprávy, které přicházejí do podkladového přenosu, a ne jenom zprávy s příslušnou To hlavičkou. Pokud to chcete povolit, může uživatel použít MatchAllMessageFilter třídu.

Viz také