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.