Víc koncových bodů na jedné adrese ListenUri
Ukázka MultipleEndpointsSingleUri ukazuje službu, která hostuje více koncových bodů na jednom ListenUri
. Tato ukázka vychází ze služby Začínáme , která implementuje službu kalkulačky.
Poznámka:
Postup nastavení a pokyny k sestavení pro tuto ukázku najdete na konci tohoto tématu.
Jak je znázorněno v ukázce více koncových bodů , může služba hostovat více koncových bodů, z nichž každá má různé adresy a případně i různé vazby. Tato ukázka ukazuje, že je možné hostovat více koncových bodů na stejné adrese. Tato ukázka také ukazuje rozdíly mezi dvěma druhy adres, které koncový bod služby má: EndpointAddress
a ListenUri
.
Jedná se EndpointAddress
o logickou adresu služby. Je to adresa, na kterou jsou zprávy SOAP adresovány. Jedná se ListenUri
o fyzickou adresu služby. Obsahuje informace o portu a adrese, kde koncový bod služby skutečně naslouchá zprávám na aktuálním počítači. Ve většině případů se tyto adresy nemusí lišit; ListenUri
pokud není explicitně zadán, použije se jako výchozí identifikátor URI EndpointAddress
koncového bodu. V několika případech je užitečné je odlišit, například při konfiguraci směrovače, který může přijímat zprávy adresované řadě různých služeb.
Služba
Služba v této ukázce má dva kontrakty a ICalculator
IEcho
. Kromě vlastního IMetadataExchange
koncového bodu existují tři koncové body aplikace, jak je znázorněno v následujícím kódu.
<endpoint address="urn:Stuff"
binding="wsHttpBinding"
contract="Microsoft.ServiceModel.Samples.ICalculator"
listenUri="http://localhost/servicemodelsamples/service.svc" />
<endpoint address="urn:Stuff"
binding="wsHttpBinding"
contract="Microsoft.ServiceModel.Samples.IEcho"
listenUri="http://localhost/servicemodelsamples/service.svc" />
<endpoint address="urn:OtherEcho"
binding="wsHttpBinding"
contract="Microsoft.ServiceModel.Samples.IEcho"
listenUri="http://localhost/servicemodelsamples/service.svc" />
Všechny tři koncové body jsou hostované na stejném ListenUri
místě a používají stejné binding
– koncové body na stejném ListenUri
místě musí mít stejnou vazbu, protože sdílejí jeden zásobník kanálu, který naslouchá zprávám na dané fyzické adrese na počítači. Každý address
koncový bod je identifikátor URN, i když adresy obvykle představují fyzická umístění, ve skutečnosti může být adresa libovolným typem identifikátoru URI, protože adresa se používá pro účely porovnávání a filtrování, jak je znázorněno v této ukázce.
Vzhledem k tomu, že všechny tři koncové body sdílejí stejné ListenUri
, při příchodu zprávy musí Windows Communication Foundation (WCF) rozhodnout, pro který koncový bod je zpráva určena. Každý koncový bod má filtr zpráv, který se skládá ze dvou částí: filtru adresy a filtru kontraktu. Filtr adres odpovídá To
adrese zprávy SOAP s adresou koncového bodu služby. Například pouze zprávy adresované To "Urn:OtherEcho"
jsou kandidáty na třetí koncový bod této služby. Filtr kontraktu odpovídá akcím přidruženým k operacím konkrétního kontraktu. Například zprávy s akcí IEcho
. Echo
odpovídá filtrům kontraktů druhého i třetího koncového bodu této služby, protože oba tyto koncové body hostují IEcho
kontrakt.
Kombinace filtru adres a filtru kontraktů tak umožňuje směrovat každou zprávu, která dorazí do služby ListenUri
, do správného koncového bodu. Třetí koncový bod je odlišný od ostatních dvou, protože přijímá zprávy odeslané na jinou adresu od ostatních koncových bodů. První a druhý koncový bod se od sebe liší na základě jejich kontraktů (akce příchozí zprávy).
Klient
Stejně jako koncové body na serveru mají dvě různé adresy, koncové body klienta mají také dvě adresy. Na serveru i klientovi se logická adresa nazývá EndpointAddress
. Ale zatímco fyzická adresa je volána ListenUri
na serveru, na klientovi, fyzická adresa se nazývá Via
.
Ve výchozím nastavení jsou tyto dvě adresy stejné jako na serveru. K určení Via
klienta, který se liší od adresy koncového bodu, ClientViaBehavior
se používá:
Uri via = new Uri("http://localhost/ServiceModelSamples/service.svc");
CalculatorClient calcClient = new CalculatorClient();
calcClient.ChannelFactory.Endpoint.Behaviors.Add(
new ClientViaBehavior(via));
Jako obvykle pochází adresa z konfiguračního souboru klienta, který byl generován Svcutil.exe. ( Via
který odpovídá ListenUri
službě) se v metadatech služby nezobrazuje, takže tyto informace musí být předány klientovi mimo pásmo (stejně jako adresa metadat služby).
Klient v této ukázce odesílá zprávy do tří koncových bodů aplikace serveru, aby ukázal, že může komunikovat se všemi třemi koncovými body (a rozlišovat) všechny tři koncové body, i když mají všechny stejné Via
.
Nastavení, sestavení a spuštění ukázky
Ujistěte se, že jste pro ukázky windows Communication Foundation provedli jednorázovou instalační proceduru.
Pokud chcete sestavit edici C# nebo Visual Basic .NET řešení, postupujte podle pokynů v části Sestavení ukázek windows Communication Foundation.
Pokud chcete spustit ukázku v konfiguraci s jedním nebo více počítači, postupujte podle pokynů v části Spuštění ukázek windows Communication Foundation.
Poznámka:
U více počítačů je nutné nahradit localhost v souboru Client.cs názvem počítače služby.