3. előadás szolgáltatások meghirdetése

50
3. Előadás Szolgáltatások meghirdetése Készítette: Szabó Zoltán

Upload: lavina

Post on 03-Feb-2016

22 views

Category:

Documents


0 download

DESCRIPTION

Készítette: Szabó Zoltán. 3. Előadás Szolgáltatások meghirdetése. Miről lesz szó?. Végpontok ABC-je Beépített kötések Többszörös kötések használata Végpontok létrehozása konfigurációs állomány segítségével Végpontok létrehozása kódból Szolgáltatás meta adatok közzététele - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 3. Előadás Szolgáltatások meghirdetése

3. ElőadásSzolgáltatások meghirdetése

Készítette: Szabó Zoltán

Page 2: 3. Előadás Szolgáltatások meghirdetése

Miről lesz szó?

Végpontok ABC-je Beépített kötések Többszörös kötések használata Végpontok létrehozása konfigurációs

állomány segítségével Végpontok létrehozása kódból Szolgáltatás meta adatok közzététele Beépített kötések módosítása Saját kötések létrehozása

Page 3: 3. Előadás Szolgáltatások meghirdetése

Bevezetés

A szolgáltatások használatához: A kliensnek meg kell találnia a

szolgáltatást Tudnia kell, hogyan kommunikálhat a

szolgáltatással

Ez hogyan érhető el? Megoldás: szolgáltatás végpontok

használata

Page 4: 3. Előadás Szolgáltatások meghirdetése

Szolgáltatás végpontok

Hogyan hozható létre? Konfigurációs állomány segítségével Kódolással

Mit tartalmaz? Végpontok ABC-jét▪ Address▪ Binding▪ Contract

Viselkedés leírókat

Page 5: 3. Előadás Szolgáltatások meghirdetése

Végpontok ABC-je

Address Hol található a szolgáltatás?

Binding Hogyan kommunikálhatunk a

szolgáltatással?Conctract

Mit csinál a szolgáltatás?

Ezek a végpontok fő alkotóelemei

Page 6: 3. Előadás Szolgáltatások meghirdetése

Address

A szolgáltatás egyedi címe (URL) WS-Addressing szabvány alapján

Scheme▪ A cím legfelső szintű része▪ Nem azonos a protokollal

Számítógép▪ Lehet publikus URL vagy lokális azonosító

(localhost) Port Útvonal▪ Elérési út a szolgáltatás fájljaihoz

Page 7: 3. Előadás Szolgáltatások meghirdetése

Address

A cím változó lehet, függ Hosztolás (lokális vagy publikus) Kötés által használt protokoll

Néhány példa: http://www.contoso.com/OrderService/ http://localhost:8000/Services/

OrderService/ net.tcp://localhost:8001/OrderService/

Page 8: 3. Előadás Szolgáltatások meghirdetése

Binding

Meghatározza a szolgáltatás elérésének módját Protokoll Üzenetek kódolása Biztonsági követelmények (pl.: SSL)

Számos előre elkészített kötést tartalmaz a WCF

Hogyan válasszuk ki a megfelelő kötést? Függ a feladattól A használat környezetétől Az üzenetek kódolásának típusától

Page 9: 3. Előadás Szolgáltatások meghirdetése

Melyik kötést válasszuk?

Page 10: 3. Előadás Szolgáltatások meghirdetése

Melyik kötést válasszuk?

Számítógépen belüli kommunikáció netNamedPipeBinding

Gépek közötti kommunikáció netTcpBinding netPeerTcpBinding

Nem WCF gépekkel való együttműködés esetén basicHttpBinding wsHttpBinding

Üzenetsorok esetén netMsmqBindig vagy msmqIntergationBinding

Page 11: 3. Előadás Szolgáltatások meghirdetése

Kötések teljesítménye

Binding Number of calls processed in 10 seconds

WSDualHttpBinding 1602 (5773)

WSHttpBinding 2531 (17257)

BasicHttpBinding: 17913

NetTcpBinding 39957

NetNamedPipeBinding 48255 A WSDualHttpBinding és a WSHttpBinding

azonban a security kikapcsolásával gyorsíthatóak. Ezen értékek láthatóak a zárójelben.

Page 12: 3. Előadás Szolgáltatások meghirdetése

Beépített kötések

Kötés Leírás

basicHttpBinding

Ez az interoperábilis kötés gyakran használatos korábbi ASMX-en (Active Server Methods) alapuló szolgáltatások felváltójaként. Támogatja a HTTP és HTTPS protokollokat, valamint a sima szöveges és MTOM (Message Optimization Mechanism) kódolási eljárást is.

wsHttpBindingws2007HttpBinding

Egy biztonságos és interoperábilis kötés, mely SOAP-ot használ HTTP felett. Támogatja a HTTP és HTTPS protokollokat, illetve a szöveges és MTOM kódolást is. Emellett biztonságot, megbízhatóságot és tranzakció kezelést is nyújt.

wsDualHttpBinding

Biztonságos és interoperábilis kötés, mely általában duplex szolgáltatás szerződések esetén használatos, mivel támogatja a kétirányú kommunikációt.

webHttpBinding Olyan szolgáltatás végpontok létrehozásához előnyös, melyek direkt HTTP és HTTPS információkat küldenek SOAP üzenetek helyett. Biztonságos és interoperábilis.

Page 13: 3. Előadás Szolgáltatások meghirdetése

Beépített kötések

Kötés Leírás

wsFederationHttpBindingws2007FederationHttpBinding

Biztonságos, interoperábilis kötés, mely támogatja a WS-Federation protokollt, megadva ezzel a szövetségi szervezeteknek a felhasználók megfelelő hitelesítését. Szintén támogatja a HTTP és HTTPS transzport protokollokat, valamint a szöveges és MTOM kódolást.

netTcpBinding Biztonságos kötés, mely WCF alkalmazásokat futtató gépek közötti kommunikációra lett optimalizálva. A TCP protokollt használja, ezen felül biztonságot, megbízhatóságot és tranzakciókezelést nyújt.

netNamedPipeBinding

Biztonságos, megbízható, optimalizált megoldást biztosít az azonos gépen futó WCF alkalmazások kommunikációjára.

netMsmqBinding

Egy várakozó sorral rendelkező kötés, mely alkalmas gépek közötti kommunikációra WCF alkalmazások között.

Page 14: 3. Előadás Szolgáltatások meghirdetése

Beépített kötések

Kötés Leírás

netPeerTcpBinding Biztonságos kötés több gép között P2P protokoll használatával TCP felett.

msmqIntergationBinding

Interoperábilis kötés, melyet meglévő MSMQ alkalmazásokkal való kommunikációhoz használhatunk gépek között.

basicHttpContextBinding

Ez a kötés támogatást nyújt a HTTP sütikhez, valamint engedélyezi a SOAP fejléceket a kontextus cseréhez.

netTcpContextBinding

Ez a biztonságos kötés engedélyezi a SOAP fejlécek használatát a tartalom cseréjekor.

wsHttpContextBinding

Biztonságos és interoperábilis kötés, mely engedélyezi a SOAP fejléceket a kontextus váltáshoz, emellett támogatja a tranzakciókat, a megbízhatósághoz és biztonsághoz kapcsolódó elemeket.

Page 15: 3. Előadás Szolgáltatások meghirdetése

Kötések összefoglalása

Page 16: 3. Előadás Szolgáltatások meghirdetése

Contract

A végpontok utolsó fő alkotóeleme Meghatározza a szolgáltatás által

nyújtott Műveleteket Az üzenetek felépítését A műveletek meghívásához szükséges

adatokat Milyen feldolgozást vagy válasz üzenetet

kaphat a kliens Általában egy interface-ben foglal helyet

Page 17: 3. Előadás Szolgáltatások meghirdetése

Végpont létrehozása

Konfigurációs állomány (deklaratív) web.config IIS hosztolás esetén app.config WAS esetén Könnyű változtathatóság Nincs szükség újrafordításra

Kód (imperatív) Nem ajánlott

Page 18: 3. Előadás Szolgáltatások meghirdetése

Konfigurációs állomány

Egy XML fájl A fájl gyökéreleme a <configuration> elem A szolgáltatások információinak a

system.serviceModel elem alatt kell elhelyezkedniük

A services szekció alatt lehet egy vagy több service elem

A service elemben kell végpontot definiálni A service elem esetén a name attribútum kötelező Legalább egy végpont definíciót tartalmaznia kell

minden service elemnek Egy állomány leírhat több szolgáltatást és

végpontot

Page 19: 3. Előadás Szolgáltatások meghirdetése

Konfigurációs állomány

Elem Leírás

<behaviors> Szolgáltatások (<serviceBehaviors>), végpontok (endpointBehaviors) viselkedésének leírásához. Minden <behavior> elemnek rendelkeznie kell egy name attribútummal, mely egyedi kell legyen.

<bindings> Testreszabott kötések megadásához. Minden elemnek egyedi azonosító name attribútuma van, mellyel a szolgáltatások hivatkoznak a kötésekre.

<client> Végpontok (<endpoint>) listája, melyek segítségével a kliens kapcsolódhat egy szolgáltatáshoz.

<comContracts> COM szerződések leírására, melyek lehetővé teszik a COM és WCF közötti együttműködést.

<commonBehaviors>

Csak a machine.config fájlban adható meg. Olyan viselkedéseket ír le, mely a gépen lévő összes szolgáltatásra és végpontra érvényes.

Page 20: 3. Előadás Szolgáltatások meghirdetése

Konfigurációs állomány

Elem Leírás

<diagnostics> A WCF diagnosztikai lehetőségeinek beállításait tartalmazó rész. Ilyen például a nyomonkövetés (tracing), a teljesítmény számlálók, de akár testreszabott üzenetszűrőket is tartalmazhat.

<extensions> Kiegészítések a felhasználó által készített kötések és viselkedések létrehozásához.

<protocolMapping>

Kötések és transport protokollok megfeleltetését írja le.

<routing> Számos útvonalszűrő adható meg ebben a részben. (pl.: megadott típusú üzeneteket mindig ugyanaz a végpont kapja meg.)

<servicesHostingEnvironment>

Csak app.config vagy machine.config tartalmazhatja. A szolgáltatás hoszt környezetének leírásához.

Page 21: 3. Előadás Szolgáltatások meghirdetése

Konfigurációs állomány

Elem Leírás

<services> Szolgáltatásokat összefogó elem. Benne találhatók a szolgáltatás leírók (<service>). Minden egyes <service> elem az adott szolgáltatáshoz tartozó beállításokat tartalmazza.

<standardEndpoints>

Ez a konfigurációs szekció teszi lehetővé a standard, előre felkonfigurált végpontok létrehozását. Ezek a végpontok újrahasznosíthatóak. Ezek a végpontok egy vagy több előre fixált címeket, kötéseket és szerződéseket tartalmaznak.

Page 22: 3. Előadás Szolgáltatások meghirdetése

Konfigurációs állomány

A konfigurációs állomány szerkesztéséhez rendelkezésre bocsát egy programot a Visual Studio: WCF Service Configuration Editor Ennek használatáról lesz szó a gyakorlati

részben Illetve a következő oldal videóiban:▪ http://msdn.microsoft.com/en-us/netframewor

k/dd939784

Page 23: 3. Előadás Szolgáltatások meghirdetése

Példa

<configuration> <system.serviceModel> <services> <service name=”MyNamespace.OrderService”>

<endpoint address=”http://localhost:8000/OrderService/” binding=”wsHttpBinding” contract=”MyNamespace.IOrderService”>

</endpoint> </service> </services> </system.serviceModel></configuration>

Page 24: 3. Előadás Szolgáltatások meghirdetése

Többszörös kötések használata

Hasznos lehet egy szolgáltatást felkészíteni többféle elérési lehetőségre TCP HTTP

Több végpont esetén a kliens a számára legmegfelelőbbet választhatja ki

Page 25: 3. Előadás Szolgáltatások meghirdetése

Többszörös kötések használata<configuration> <system.serviceModel> <services> <service name=”OrderService”>

<endpoint address=”http://localhost:8000/OrderService/” binding=”basicHttpBinding” contract=”MyNamespace.IOrderService”>

</endpoint><endpoint address=”http://localhost:8000/OrderService/secure”

binding=”wsHttpBinding” contract=”MyNamespace.IOrderService”>

</endpoint><endpoint address=”net.tcp://localhost:8001/OrderService/”

binding=”netTcpBinding” contract=”MyNamespace.IOrderService”>

</endpoint> </service> </services> </system.serviceModel></configuration>

Page 26: 3. Előadás Szolgáltatások meghirdetése

Többszörös kötések használata

Fontos megjegyezni, hogy a végpontok címének egyedinek kell lennie Ellenkező esetben hibát kapunk Kivétel, ha egy szolgáltatás 2 különböző

szerződést használ▪ Cím, kötés egyezhet▪ Viszont ekkor a szerződésnek kell

különbözőnek lennie

Page 27: 3. Előadás Szolgáltatások meghirdetése

Szolgáltatás címének megadása

Abszolút address=”http://www.contoso.com/

FirstService” Könnyen érthető Egyszerűen megadható Nem túl hatékony több végpont esetén▪ Sokat kell gépelni, emiatt könnyebb elírni▪ Változtatás esetén több helyen is módosítani

kell

Page 28: 3. Előadás Szolgáltatások meghirdetése

Szolgáltatás címének megadása

Relatív Több végpont megadása esetén

hatékonyabb Szükséges a báziscím megadás▪ <host> elemen belül▪ <add> elem segítségével▪ Több báziscím is megadható

Page 29: 3. Előadás Szolgáltatások meghirdetése

Példa

<host> <baseAddresses> <add baseAddress=”http://localhost:8000/OrderSercive/”/> <add baseAddress=”net.tcp://localhost:8000/OrderSercive/”/> </baseAddresses></host><endpoint address=””

binding=”basicHttpBinding”contract=”MyNamespace.IOrderService”>

</endpoint><endpoint address=”secure”

binding=”wsHttpBinding”contract=”MyNamespace.IOrderService”>

</endpoint><endpoint address=”” binding=”netTcpBinding”

contract=”MyNamespace.IOrderService”></endpoint>

Page 30: 3. Előadás Szolgáltatások meghirdetése

Végpont létrehozása kódból

Kódból is megadható minden, amit eddig a konfigurációs állományban megadtunk

Ehhez létre kell hoznunk egy ServiceHost objektumot AddServiceEndpoint metódusával

adhatunk meg végpontokat▪ Address▪ Binding▪ Contract

Page 31: 3. Előadás Szolgáltatások meghirdetése

Példa

Uri httpAddress = new Uri(”http://localhost:8000/OrderService/”);Uri tcpAddress = new Uri(”net.tcp://localhost:8001/OrderService/”);Uri[] baseAddresses = {httpAddress, tcpAddress};

ServiceHost host = new ServiceHost(typeof(MyNameSpace.OrderService),baseAddresses);host.AddServiceEndpoint(

typeof(MyNamespace.IOrderService),new BasicHttpBinding(),””);

host.AddServiceEndpoint(typeof(MyNamespace.IOrderService),new WSHttpBinding(),”secure”);

host.AddServiceEndpoint(typeof(MyNamespace.IOrderService),new NetTcpBinding(),””);

Page 32: 3. Előadás Szolgáltatások meghirdetése

Meta adatok közzététele

A WCF lehetőséget biztosít a meta adatok közzétételére a végpontokon keresztül HTTP-GET használatával HttpGetEnabled=true megadásával

Ehhez meg kell adni egy szolgáltatás viselkedést

Majd a szolgáltatás megadásakor hivatkozni kell a viselkedésre(kód vagy konfig)

Ehhez szükség van egy speciális végpontra

Page 33: 3. Előadás Szolgáltatások meghirdetése

Meta adatok közzététele

Ezen végpont címe a szolgáltatás címének kiegészítése a mex szóval

A végpontnak a mexHttpBinding kötést kell használnia (esetleg mexNamedPipeBinding vagy mexTcpBinding)

A végpont szerződése az IMetadataExchange interface kell legyen

A megadás történhet konfig fájlban és kódban

Page 34: 3. Előadás Szolgáltatások meghirdetése

Példa

<services><service name=”OrderService” behaviorConfiguration=”MexGet”>

<endpoint address=”http://localhost:8000/OrderService/”binding=”basicHttpBinding”contract=”MyNamespace.IOrderService” />

<endpoint address=”mex”binding=”mexHttpBinding”contract=”IMetadataExchange” />

</service></services><behaviors>

<serviceBehaviors><behavior name=”MexGet”>

<serviceMetadata httpGetEnabled=”True” /></behavior>

</serviceBehaviors></behaviors>

Page 35: 3. Előadás Szolgáltatások meghirdetése

Példa

ServiceHost host = new ServiceHost(typeof(OrderService));

ServiceMetadataBehavior mb;mb = host.Description.Behaviors.Find<ServiceMetadataBehavior>();if(mb == null){

mb = new ServiceMetadataBehavior();mb.HttpGetEnabled = true;host.Description.Behaviors.Add(mb);

}Host.AddServiceEndpoint(

typeof(MyNamespace.IOrderService),new BasicHttpBinding(),”http://localhost:8000/OrderService/”);

Host.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName,MetadataExchangeBindings.CreateMexHttpBinding(),”mex”);

Page 36: 3. Előadás Szolgáltatások meghirdetése

Beépített kötések testre szabása

Legtöbb esetben a beépített kötések használata megfelelő

Előfordulhatnak olyan speciális körülmények, amikor szükséges meglévő kötések módosítása új kötéstípus létrehozása

A WCF mindkét lehetőséget támogatja

Page 37: 3. Előadás Szolgáltatások meghirdetése

Beépített kötések testre szabása

A legtöbb beépített kötés rendelkezik módosítható tulajdonságokkal, melyekkel igényeiknek megfelelően testre szabhatjuk őket

Page 38: 3. Előadás Szolgáltatások meghirdetése

wsHttpBinding property-kProperty Leírás Alapérték

AllowCookies Egy logikai érték, mely meghatározza, hogy a kliens használhat-e sütiket

False

ByPassProxyOnLocal

Logikai érték, mely meghatározza, hogy a lokális címek kikerüljék-e a proxyt.

False

CloseTimeout Azt az időt jelzi, mely eltelhet a kapcsolatbontásnál mielőtt az hibát eredményezne.

1 perc

HostNameComparisonMode

Meghatározza, hogy a hosztnév szükséges-e a szolgáltatás eléréséhez, amennyiben egyezik az URI.

StrongWildCard

MaxBufferPoolSize Meghatározza a puffer menedzserhez rendelhető maximális memóriamennyiséget.

65536 byte

Page 39: 3. Előadás Szolgáltatások meghirdetése

wsHttpBinding property-k

Property Leírás Alapérték

MaxRecievedMessageSize

Az üzenet maximális hosszát határozza meg.

65536 byte

MessageEncoding Megadja az üzenetek kódolásához használt eljárást. (szöveg/XML vagy MTOM)

Szöveg

Name A kötés neve. Null referencia

Namespace A kötéshez rendelt XML névtér. http://tempuri.org/

OpenTimeout Megadja, hogy mennyi idő telhet el kapcsolat nyitásakor a hiba keletkezéséig.

1 perc

ProxyAddress Egy proxy URI címét határozza meg. Amennyiben a UseDefaultWebProxy értéke igazra van állítva, ez a mező figyelmen kívül lesz hagyva.

Null referencia

Page 40: 3. Előadás Szolgáltatások meghirdetése

wsHttpBinding property-kProperty Leírás Alapérték

ReaderQuotas Szöveges tartalmakra alkalmazott megkötések. Pl.: maximális hossz.

None

RecieveTimeout Megadja, hogy egy kapcsolat meddig lehet inaktív, mielőtt kivétel keletkezne.

10 perc

SendTimeout Megadja, hogy legfeljebb mennyi ideig tarthat egy írási művelet, mielőtt kivétel keletkezne.

1 perc

TextEncoding Az üzenet szövegének kódolásához használt eljárás.

UTF8Encoding

TransactionFlow Megadja, hogy a kötés támogatja-e a WS-Transactions szabvány.

False

UseDefaultWebProxy

Megadja, hogy a kötés használja-e az automatikusan konfigurált proxyt vagy sem.

True

Page 41: 3. Előadás Szolgáltatások meghirdetése

Beépített kötések testre szabása

Kódban Binding osztály használatával

Konfigurációs állományban bindingConfiguration property

használatával▪ A módosított kötés nevére hivatkozik

A bindings szekcióban ekkor szerepelnie kell a módosított kötésnek

Page 42: 3. Előadás Szolgáltatások meghirdetése

Példa

<system.serviceModel> <services> <service name=”OrderService”> <endpoint address=”http://localhost:8000/OrderService/”

contract=”MyNamespace.IOrderService”binding=”wsHttpBinding”bindingConfiguration=”CloseTimeout” />

</service> </services> <bindings> <wsHttpBinding> <binding name=”CloseTimeout” closeTimeout=”00:03:00” /> </wsHttpBinding> </bindings></system.serviceModel>

Page 43: 3. Előadás Szolgáltatások meghirdetése

Példa

ServiceHost host = new ServiceHost(typeof(OrderService));

WSHttpBinding wsBinding = new WSHttpBinding();TimeSpan ts = new TimeSpan(0, 3, 0);wsBinding.CloseTimeout = ts;

host.AddServiceEndpoint(typeof(MyNameSpace.IOrderService),wsBinding,”http://localhost:8000/OrderService/”);

Page 44: 3. Előadás Szolgáltatások meghirdetése

Egyedi kötések

Vannak olyan ritka esetek, amikor a meglévő kötések még módosításokkal sem tudják kielégíteni az elvárásainkat

A WCF ezért lehetőséget nyújt CustomBinding vagy ún. saját kötés típus létrehozására A javaslat az, hogy amennyiben

lehetséges inkább módosítsunk egy meglévő kötést

Page 45: 3. Előadás Szolgáltatások meghirdetése

Egyedi kötések

A kötés típusok egy vagy több kötési elemből épülnek fel

A kötési elemek megadják a Protokollt Kódolást - kötelező Átviteli eljárást – kötelező

A kötés létrehozásakor fontos az elemek megadásának sorrendje

Page 46: 3. Előadás Szolgáltatások meghirdetése

Elemek megadásának sorrendjeElem Leírás

Transaction flow

Tranzakciók kezelésének megadásához. Opcionális.

Reliability Megadja, hogy a csatornák megbízható session-t használjanak-e. Lehetővé teszi az üzenetek sorrendhelyes átvitelét. Opcionális.• netTcpBinding• wsHttpBinding• wsDualHttpBinding

Security Opcionális. Lehetőséget nyújt olyan funkciók megadására, mint autentikáció, authorizáció, védelem és titoktartás.

Transport Kötelezően megadandó elem. Saját transzport megadása vagy a következők egyike: TCP, NamedPipes, HTTP, HTTPS, MSMQ vagy P2P.

Encoding Ez a kötelező elem adja meg az üzenetek kódolását. Ez lehet szöveg, bináris vagy MTOM kódolás.

Page 47: 3. Előadás Szolgáltatások meghirdetése

CustomBinding létrehozása

Konfigurációs állományban A bindings szekció alatt A customBinding elem használatával

Kódban System.ServiceModel.Channels névtér

megadásával BindingElementCollection és

CustomBinding létrehozásával

Page 48: 3. Előadás Szolgáltatások meghirdetése

Példa

<system.serviceModel> <services> <service name=”OrderService”> <endpoint address=”http://localhost:8000/OrderService/”

contract=”MyNamespace.IOrderService”binding=”customBinding”bindingConfiguration=”NewBinding” />

</service> </services> <bindings> <customBinding> <binding name=”NewBinding”>

<reliableSession /><security>

<localServiceSettings inactivityTimeout=”00:10:00” /></security><httpTransport /><textMessageEncoding />

</binding> </customBinding> </bindings></system.serviceModel>

Page 49: 3. Előadás Szolgáltatások meghirdetése

Példa

using System.ServiceModel.Channels;

ServiceHost host = new ServiceHost(typeof(OrderService));

BindingElementCollection bec = new BindingElementCollection();SymmetricSecurityBindingElement ssbe = new SymmetricSecurityBindingElement();ssbe.LocalServiceSettings.InactivityTimeout = new TimeSpan(0, 10, 0);bec.Add(ssbe);bec.Add(newTextMessageEncodingBindigElement());bec.Add(new HttpTransportBindingElement());CustomBinding customBinding = new CustomBinding(bec);

host.AddServiceEndpoint(typeof(MyNameSpace.IOrderService),customBinding,”http://localhost:8000/OrderService/”);