1 / 50

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

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

lavina
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

  7. Address • A cím változó lehet, függ • Hosztolás (lokálisvagy 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/

  8. 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

  9. Melyik kötést válasszuk?

  10. 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

  11. Kötések teljesítménye • A WSDualHttpBinding és a WSHttpBinding azonban a securitykikapcsolásával gyorsíthatóak. Ezen értékek láthatóak a zárójelben.

  12. Beépített kötések

  13. Beépített kötések

  14. Beépített kötések

  15. Kötések összefoglalása

  16. 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

  17. Végpont létrehozása • Konfigurációs állomány (deklaratív) • web.config IIS hosztolás esetén • app.configWAS esetén • Könnyű változtathatóság • Nincs szükség újrafordításra • Kód (imperatív) • Nem ajánlott

  18. 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

  19. Konfigurációs állomány

  20. Konfigurációs állomány

  21. Konfigurációs állomány

  22. 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/netframework/dd939784

  23. Példa <configuration> <system.serviceModel> <services> <service name=”MyNamespace.OrderService”> <endpointaddress=”http://localhost:8000/OrderService/” binding=”wsHttpBinding” contract=”MyNamespace.IOrderService”> </endpoint> </service> </services> </system.serviceModel> </configuration>

  24. 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

  25. Többszörös kötések használata <configuration> <system.serviceModel> <services> <service name=”OrderService”> <endpointaddress=”http://localhost:8000/OrderService/” binding=”basicHttpBinding” contract=”MyNamespace.IOrderService”> </endpoint> <endpointaddress=”http://localhost:8000/OrderService/secure” binding=”wsHttpBinding” contract=”MyNamespace.IOrderService”> </endpoint> <endpointaddress=”net.tcp://localhost:8001/OrderService/” binding=”netTcpBinding” contract=”MyNamespace.IOrderService”> </endpoint> </service> </services> </system.serviceModel> </configuration>

  26. 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

  27. 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

  28. 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ó

  29. Példa <host> <baseAddresses> <add baseAddress=”http://localhost:8000/OrderSercive/”/> <add baseAddress=”net.tcp://localhost:8000/OrderSercive/”/> </baseAddresses> </host> <endpointaddress=”” binding=”basicHttpBinding” contract=”MyNamespace.IOrderService”> </endpoint> <endpointaddress=”secure” binding=”wsHttpBinding” contract=”MyNamespace.IOrderService”> </endpoint> <endpointaddress=”” binding=”netTcpBinding” contract=”MyNamespace.IOrderService”> </endpoint>

  30. 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 • AddServiceEndpointmetódusával adhatunk meg végpontokat • Address • Binding • Contract

  31. Példa Uri httpAddress = newUri(”http://localhost:8000/OrderService/”); Uri tcpAddress= newUri(”net.tcp://localhost:8001/OrderService/”); Uri[] baseAddresses = {httpAddress, tcpAddress}; ServiceHosthost = newServiceHost(typeof(MyNameSpace.OrderService),baseAddresses); host.AddServiceEndpoint( typeof(MyNamespace.IOrderService), newBasicHttpBinding(), ””); host.AddServiceEndpoint( typeof(MyNamespace.IOrderService), newWSHttpBinding(), ”secure”); host.AddServiceEndpoint( typeof(MyNamespace.IOrderService), newNetTcpBinding(), ””);

  32. 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

  33. 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 IMetadataExchangeinterface kell legyen • A megadás történhet konfig fájlban és kódban

  34. Példa <services> <service name=”OrderService” behaviorConfiguration=”MexGet”> <endpointaddress=”http://localhost:8000/OrderService/” binding=”basicHttpBinding” contract=”MyNamespace.IOrderService” /> <endpointaddress=”mex” binding=”mexHttpBinding” contract=”IMetadataExchange” /> </service> </services> <behaviors> <serviceBehaviors> <behaviorname=”MexGet”> <serviceMetadatahttpGetEnabled=”True” /> </behavior> </serviceBehaviors> </behaviors>

  35. Példa ServiceHosthost = newServiceHost(typeof(OrderService)); ServiceMetadataBehaviormb; mb = host.Description.Behaviors.Find<ServiceMetadataBehavior>(); if(mb == null){ mb = newServiceMetadataBehavior(); mb.HttpGetEnabled = true; host.Description.Behaviors.Add(mb); } Host.AddServiceEndpoint( typeof(MyNamespace.IOrderService), newBasicHttpBinding(), ”http://localhost:8000/OrderService/”); Host.AddServiceEndpoint( ServiceMetadataBehavior.MexContractName, MetadataExchangeBindings.CreateMexHttpBinding(), ”mex”);

  36. 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

  37. 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

  38. wsHttpBindingproperty-k

  39. wsHttpBindingproperty-k

  40. wsHttpBindingproperty-k

  41. Beépített kötések testre szabása • Kódban • Binding osztály használatával • Konfigurációs állományban • bindingConfigurationproperty 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

  42. Példa <system.serviceModel> <services> <service name=”OrderService”> <endpointaddress=”http://localhost:8000/OrderService/” contract=”MyNamespace.IOrderService” binding=”wsHttpBinding” bindingConfiguration=”CloseTimeout” /> </service> </services> <bindings> <wsHttpBinding> <bindingname=”CloseTimeout” closeTimeout=”00:03:00” /> </wsHttpBinding> </bindings> </system.serviceModel>

  43. Példa ServiceHosthost = newServiceHost(typeof(OrderService)); WSHttpBindingwsBinding = newWSHttpBinding(); TimeSpants = newTimeSpan(0, 3, 0); wsBinding.CloseTimeout = ts; host.AddServiceEndpoint( typeof(MyNameSpace.IOrderService), wsBinding, ”http://localhost:8000/OrderService/”);

  44. 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

  45. 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

  46. Elemek megadásának sorrendje

  47. CustomBinding létrehozása • Konfigurációs állományban • A bindings szekció alatt • A customBinding elem használatával • Kódban • System.ServiceModel.Channelsnévtér megadásával • BindingElementCollection és CustomBinding létrehozásával

  48. Példa <system.serviceModel> <services> <service name=”OrderService”> <endpointaddress=”http://localhost:8000/OrderService/” contract=”MyNamespace.IOrderService” binding=”customBinding” bindingConfiguration=”NewBinding” /> </service> </services> <bindings> <customBinding> <bindingname=”NewBinding”> <reliableSession /> <security> <localServiceSettingsinactivityTimeout=”00:10:00” /> </security> <httpTransport /> <textMessageEncoding /> </binding> </customBinding> </bindings> </system.serviceModel>

  49. Példa usingSystem.ServiceModel.Channels; ServiceHosthost = newServiceHost(typeof(OrderService)); BindingElementCollectionbec = newBindingElementCollection(); SymmetricSecurityBindingElementssbe = newSymmetricSecurityBindingElement(); ssbe.LocalServiceSettings.InactivityTimeout = newTimeSpan(0, 10, 0); bec.Add(ssbe); bec.Add(newTextMessageEncodingBindigElement()); bec.Add(newHttpTransportBindingElement()); CustomBindingcustomBinding = newCustomBinding(bec); host.AddServiceEndpoint( typeof(MyNameSpace.IOrderService), customBinding, ”http://localhost:8000/OrderService/”);

  50. Gyakorlatként megoldott feladat • http://bloggingabout.net/blogs/dennis/archive/2010/06/16/wcf-simple-example-in-visual-studio-2010.aspx

More Related