Készítette: Galán Mihály.  Viselkedés szerződések definiálása  Szolgáltatás szerződések és szolgáltatás típusok  Hiba szerződések  Üzenetcsere minták.

Slides:



Advertisements
Hasonló előadás
Osztály leszármaztatás
Advertisements

A hálózat működése 1. A DHCP és az APIPA
Windows Communication Foundation (WCF)
RESTful Web Service tesztelése
Krizsán Zoltán iit 1.1.  Aszinkron történésről értesítés egy vagy több objektum számára.  Delegátumok segítségével valósítja meg a C#.  event típus,
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
WINDOWS COMMUNICATION FOUNDATION Session és példányosítás.
Felhasználói felületek és üzleti logika Bollobás Dávid ASP.NET
C++ programozási nyelv Gyakorlat hét
1. Előadás WCF- bemutatás
OE-NIK HP Haladó Programozás Windows Communication Foundation A szolgáltatás, a hoszt és az ügyfél elkészítése.
Programozás III KOLLEKCIÓK 2..
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Fájlkezelés, IO Kivételkezelés Belső osztályok
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 9. Gyakorlat Alap file műveletek.
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Tömbök ismétlés Osztályok Java-ban Garbage collection
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
A C++ programozási nyelvSoós Sándor 1/15 C++ programozási nyelv Gyakorlat hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
WEB Technológiák Dr. Pance Miklós – Kolcza Gábor Miskolci Egyetem.
WSDL alapismeretek A WSDL (Web Services Description Language – Web szolgáltatások leíró nyelv) egy XML-alapú nyelv a Web szolgáltatások leírására és azok.
C# tagfüggvények.
JSP és JavaBean JavaServer Pages és Java Beans Fabók Zsolt Általános Informatikai Tanszék Miskolci Egyetem.
C# tagfüggvények.
Krizsán Zoltán iit 1.2.  Nem kell vizuális felületnek lennie.  Delegátumok segítségével valósíthatja meg a.NET. Krizsán Zoltán iit Delegátumok C#-ban2.
Entity framework Krizsán Zoltán
OE-NIK HP Haladó Programozás WCF kivételkezelés. OE-NIK HP Haladó Programozás Windows Communication Foundation A szolgáltatás, a hoszt és az ügyfél elkészítése.
Annotációk a Java 5 nyelvben Kozsik Tamás. Annotációk Módosítószavak bővítése A programszöveg elemeihez rendelhetők –Csomagokhoz, típusokhoz, metódusokhoz,
SOAP alapismeretek A SOAP egy egyszerű XML alapú protokoll, ami lehetővé teszi, hogy az alkalmazások információt cseréljenek a HTTP-én keresztül. Forrás:
P ROGRAMOZÁS C# - BAN Kivételkezelés. P ÉLDA I. Nullával való osztás miatt kapjuk a hibaüzenetet.
P ROGRAMOZÁS I/O műveletek. S YSTEM.C ONSOLE A programjainknak fontos része a felhasználóval való kommunikáció. Adatokat kell kérni tőle, vagy közölnünk.
Programozás Az adatokról C# -ban.
Objektum orientált programozás a gyakorlatban
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
Generics Krizsán Zoltán. Bemutató A.NET 2.0 verziótól. A.NET 2.0 verziótól. Típusparaméter Típusparaméter Más nyelvben ez a template (sablon). Más nyelvben.
Java web programozás 11..
Webszolgáltatások Simon Balázs
HTML ÉS PHP (Nagyon) rövid áttekintés. ADATBÁZISRENDSZEREK MŰKÖDÉSI SÉMÁJA Felh. interakció DB Connector MySQL ? A gyakorlaton:
Illés Zoltán ELTE Informatikai Kar
Adatbáziskezelés. Adat és információ Információ –Új ismeret Adat –Az információ formai oldala –Jelsorozat.
Java web programozás 6..
Haladó Programozás Reflexió OE-NIK HP.
Szebb és használhatóbb programok Vezérlőelemek dinamikus felhelyezése.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Programozás III JPA.
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
Haladó Programozás Windows Communication Foundation
Adatkötés Sablonokkal
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Web programozás és haladó fejlesztési technikák – C#
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Thread és Task.
Függvénysablonok használata
Unit tesztelés Swift-ben
Előadás másolata:

Készítette: Galán Mihály

 Viselkedés szerződések definiálása  Szolgáltatás szerződések és szolgáltatás típusok  Hiba szerződések  Üzenetcsere minták  Szerkezeti szerződések definiálása  Adat szerződések  Kollekciók  Üzenetszerződések

 Maga a szolgáltatás hogyan viselkedik és ehhez milyen műveletek szükségesek.  Mikor és milyen hiba léphet fel a szolgáltatásban.  Mik azok a MEP követelmények, amik kölcsönhatásba lépnek a szolgáltatással? (kérés/válasz, egyirányú, duplex)

 A szolgáltatás szerződés egy kollektív mechanizmus, melyben a szolgáltatás képességei és követelményei vannak specifikálva a fogyasztó számára.  Ezek a mechanizmusok .NET interface típus  Operációk a típuson belül .NET attribútumok  ServiceContractAttribute  OperationContractAttribute  MessageParameterAttribute

[ServiceContract()] public interface ITaskManagerService { [OperationContract()] int AddTask (String taskDescription, string assignedTo) //stb… }

 A System.ServiceModel namespace-ben definiált.  Alkalmazható.NET interfésznél és osztálynál.  Az attribútum nem származtatott.  Deklarálható paraméter nélkül is.

Nevesített paraméterLeírás NameAz alapértelmezettől eltérő nevet definiál. Ez a szerződés név jelenik meg a portType névként, mikor a felhasználó hozzáfér a WSDL-hez. NamespaceA szolgáltatás számára egy cél névteret határoz meg a WSDL-ben. (Default: CallbackContractCallback szerződésként társít egy újabb szolgáltatás szerződést. ProtectionLevelMegszorításokat lehet specifikálni a szolgáltatás szerződéshez. (Milyen szinten vannak védve az üzenetek a hálózaton) ConfigurationNameA szolgáltatás elem név attribútumát specifikálja a konfigurációs fájlban. SessionModeMeghatározza, hogy mely session-öket fedhet fel a végpontnál.

[ServiceContract(Name=„TaskManagerService”, Namespace = „ public interface ITaskManagerService { //stb… }

 Szintén a System.ServiceModel namespace-ben definiált.  Csak metódusoknál alkalmazható.  A metódust úgy kell deklarálni, hogy a szolgáltatás szerződéshez tartozzon.

Nevesített paraméterLeírás NameAz alapértelmezettől eltérő nevet határoz meg. ActionControls the action header for messages to this operation. ReplyActionControls the action header for response messages from this operation. IsOneWayJelzi, hogy a művelet egyirányú és nem kap választ. ProtectionLevelMegszorításokat lehet specifikálni a szolgáltatás szerződéshez. (Milyen szinten vannak védve az üzenetek a hálózaton). IsInitiatingJelzi, ha a művelet új session-t kezdeményez a hívó és a szolgáltatás között. IsTerminatingJelzi, ha a művelet terminál egy létező session-t a hívó és a szolgáltatás között.

[ServiceContract()] public interface SomeCrudContract{ [OperationContract(IsOneWay = true, Action = „urn:crud:insert”)] void ProcessInsertMessage(Message message) [OperationContract(IsOneWay = true, Action =„urn:crud:update”)] void ProcessUpdateMessage(Message message) [OperationContract(IsOneWay = true, Action =„urn:crud:delete”)] void ProcessDeleteMessage(Message message) }

 Szintén a System.ServiceModel namespace-ben definiált.  Irányítja, hogyan az operációk paramétereinek a neve és a visszatérési értékek hogyan jelenjenek meg a szolgáltatás leírásban.  Egyetlen paramétere van, ez pedig a Name paraméter.

[OperationContract()] [return: MessageParameter(Name=„responseString”)] string SomeOp([MessageParameter(Name=„string”] string s)

 Hiba kontra kivétel  A kivétel egy.NET mechanizmus, mely a futás során felmerülő problémákat kezeli.  Throw, catch, ignore mechanizmusok  Kezelni kell őket, különben a.NET terminálja azt a szálat, amelyikben a hiba történt.  SOAP hiba mechanizmusra hivatkozik.  A hibát vagy a hiba feltételeit a szolgáltatástól a felhasználóig szállítja.  Megvan a bekövetkező hiba üzenetének a struktúrája.

 Standard mechanizmus, mely a.NET kivételek és SOAP hibák között közvetít.  FaultException: típus nélküli hiba adatot küld a felhasználónak.  DaultExcepton : típusos adatot küld a felhasználónak. A TDetail jelenti a hiba információ típusát.

 System.ServiceModel  Megengedi a fejlesztőnek, hogy deklarálja, milyen hiba következhet be a szolgáltatás egyes operációinál.  Tulajdonságok:  Az attribútum csak a műveletnél alkalmazható.  Nem származtatott.  Többször alkalmazható.

[ServiceContract()] public interface ICalculatorService { [OperationContract()] [FaultContract(typeof(string))] double Divide(double numerator, double denominator); } public class CalculatorService : ICalculatorService { public double Divide(double numerator, double denominator){ if(denominator == 0.0d){ String faultDetail = „You cannot divide by zero”; throw new FaultException (faultDetail); } return numerator/denominator; }

 Request/response  OneWay  Duplex

 Legnépszerűbb üzenetváltási módszer.  Egyszerűen beállítható.  OperationContractAttribute: IsOneWay paraméter.  Lehetővé teszi, hogy a szolgáltatás hibákat bocsásson ki vagy tranzakció kontextussal térjen vissza.

[ServiceContract()] public interface ILogisticsService { [OperationContract()] WorkOrderAcknowledgement SubmitWorkOrder(WorkOrder workOrder); [OperationContract()] void CancelWorkOrder(int workOderNumber); }

 Ha csak egy üzenetet szeretnék küldeni.  Nem érdekel a válasz.  Beállítása: OperationContractAttribute IsOneWay property-jét kell „true”-ra állítani.  Nem használható FaultContract attribútummal együtt. Miért?  Sorbaállított üzenetküldés esetén.

[ServiceContract()] public interface ILogisticsService { [OperationContract(IsOneWay=true)] void CancelWorkOder(int workOrderNumber); }

 Két helyzetben használatos:  A kliens üzenetet küld a szolgáltatásnak, mert hosszú távú feldolgozást kezdeményezzen és megerősítést kér a szolgáltatástól, hogy a a kért feldolgozás megtörtént.  A kliensnek tudni kell fogadnia kéretlen üzeneteket a szolgáltatástól.

[ServiceContract()] interface IGreetingHandler { [OperationContract(IsOneWay=true)] void GreetingProduced(string greeting); } [ServiceContract(CallbackContract = typeof(IGreetingHandler))] interface IGreetingService { [OperationContract(IsOneWay = true)] void RequestGreetng(string name); }

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] class GreetingService : IGreetService { public void RequestGreeting(string name) { Console.WriteLine(„In Service.Greet”); IGreetingHandler callbackHandler = OperationContext.Current.GerCallbackChannel (); callbackHandler.GreetingProduced(„Hello ” + name); }

 Megegyezés a szolgáltatás és a felhasználó között az üzenetváltás során a hasznos adat formájáról és felépítéséről.  Komplex típusok szerializálására. [OperationContract()] ResponseMessageType SomeOp1(RequestMessageType reqMsg); [OperationContract()] string SomeOp2(string el1, string el2);

 DataContractAttribute használatával deklarálhatók az adat szerződések.  A DataMemberAttribute segítségével lehet bevonni a típusokat a szerződésbe.  Ez opcionális és független a láthatóságtól.

[DataContract(Namespace = „ public enum TitleOptions : int { [EnumMember()] Mr = 0, [EnumMember()] Ms = 1, [EnumMember()] Mrs = 2, [EnumMember()] Dr = 3, }

[DataContract(Namespace = „ public class ContactInfo { [DataMember(IsRequired = false)] public string PhoneNumber; [DataMember(IsRequired = false)] public string Address; }

 Enum, struktúra, osztály  Nem származtatott  Összesen két paramétere van.

ParaméterLeírás NameMeghatározza a nevet, ami a létrejövő sémában megjelenik. NamespaceBeállítja a sémában a cél névtere. Az alap: schemas.datacontract.org/2004/07[CLR namespace]

 System.Runtime.Serialization  Azt határozza meg, hogy a tagnak benne kell-e lennie az adatszerkezet szerializációjában.

ParaméterLeírás NameA tagból generált séma elem nevét állítja be. Alapesetben a.NET típusnál ez a mező vagy property neve. IsRequiredminOccurs előfordulást szabályozza a sémában. Az alap értek false, ami azt jelenti, hogy az elem opcionális, azaz a minOccurs = 0. OrderAz elemek sorrendjét adja meg a sémában. EmitDefaultValueAzt adja meg, hogy melyik alapértelmezett értékeket vegye be a szerializációba. Alapértelmezetten true-ra van állítva.

 Azt deklarálja, hogy egy megadott enum típus DataContractAttribute-tal deklarálva része legyen az adat szerződésnek.  Egyetlen paramétere a Value, mely a szerializálásnál használható fel.  Az alap érték a valódi érték.

 DataContractSerializer az új WCF szerializáló.  Opt-In módban működik, ami az elődjének (XMLSerializer) az ellentéte.  DataContractSerializer esetén meg kell jelölni, hogy mely tagok legyenek az adat szerződés részei.

[Serializable()] public class ContactInfo { public string PhoneNumber; public string Address; [NonSerialized()] public string HomeAddress; }

[DataContract()] public class ContactInfo { [DataMember()] public string PhoneNumber; [DataMember()] public string Address; public string HomeAddress; }

[ServiceContract()] interface ITaskManager { [OperationContract()] List GetTasksByAssignedName (string name); }

[ServiceContract()] Interface ITaskManager { [OperationContract()] Task[] GetTasksBYAssignedName (string name); }

 Csak akkor automatikus, ha a kollekció egy konkrét kollekció a szerződésben és szerializálható.  Mi történik akkor, ha nem teljesül a feltétel?  Megoldás: CollectionDatacontractAttribute

[CollectonDataContract(Name = „MyCollectionOf{0}”)] public class MyCollection : Ienumerable { public void Add(T item) { … } Ienumerator Ienumerable.GetEnumarator() { … } public Ienumerator GetEnumerator() { … } //… } [ServiceContract()] interface ITaskManager { [OperationContract()] MyCollection GetTaskByAssignedName(string name); }

 Miután a kliens oldalon legenerálódott a proxy, a GetTasksByAssigned művelet visszatérési típusa így fog látszódni: [CollectionDataContract()] public class MyCollectionOfTask : List { }

[DataContract()] [KnownType(typeof(LoanApprovalTask))] class Task { //… } [DataContract()] class LoanApprovalTask : Task { //… }

[ServiceContract()] interface ITaskManager { [OperationContract()] List GetTasksByAssignedName (string name); }

 Használat okai:  Hogyan épüljön fel a SOAP test.  Hogyan szerializálódjon.  Szolgáltasson és hozzáférjen a headerökhöz.  Attribútumok:  MessageContractAttribute  MessageHeaderAttribute  MessageBodyMemberAttribute

ParaméterLeírás IsWrappedHa „true”, akkor az üzenet test tartalmaz egy wrapper elemet, mely az üzenet szerződés típusáról vagy a WrapperName-ről kapja a nevét. Ha „false”, akkor „unwrapped”, és a test elemei közvetlenül alatta jelennek meg. ProtectionLevelMegszorításokat lehet specifikálni a szolgáltatás szerződéshez. (Milyen szinten vannak védve az üzenetek a hálózaton) WrapperNameEllátja névvel a test „wrapper” elemet. WrapperNamespaceElltája névtérrel a test „wrapper” elemet.

ParaméterLeírás NameA szerializált header elem nevét adja meg. NamespaceNévtérrel látja el a header-t és a gyerekeit, kivéve ha típus szinten felül van írva. ProtectionLevelMegszorításokat lehet specifikálni a szolgáltatás szerződéshez. (Milyen szinten vannak védve az üzenetek a hálózaton) ActorAz URI értéke jelzi, hogy melyik actor a tervezett célja a header-nek. MustUnderstandJelzi, hogy a header címzettjének fel kell-e dolgoznia azt. RelayJelzi, hogy továbbítania-e kell a következő címzettnek az üzenetet, ha az actor nem dolgozza fel.

ParaméterLeírás NameA szerializált test elem nevét felügyeli. NamespaceNévtérrel látja el a test elemet és a gyerekeit, kivéve ha típus szinten felül van írva. ProtectionLevelMegszorításokat lehet specifikálni a szolgáltatás szerződéshez. (Milyen szinten vannak védve az üzenetek a hálózaton) OrderAz elemek sorrendjét adja meg a sémában.

 Control over Message Body Wrapping  Supplying Custom Headers  Saját védelmi mechanizmus esetén szükség van arra, hogy a saját autentikációnkat elhagyjuk egy privát SOAP header segítségével.  A szolgáltatás felhasználóinak szüksége lehet valamilyen license kulcsra ahhoz, hogy futási időben hozzáférjenek a szolgáltatáshoz.

[DataContract()] public class ContactInfo { [DataMember()] public string PhoneNumber; [DataMember()] public string Address; } [ServiceContract()] public interface ISomeService { [OperationContract()] ContactInfo GetProviderContactInfo(); }

 A szolgáltatás orientáltság egyik nagy előnye, hogy megkönnyíti a szolgáltatás elválasztását a felhasználótól.  Ehhez verzió toleránsnak kell lennie.  3 lehetőség:  Új tag hozzáadása az adat szerződéshez.  Hiányzik egy tag az adat szerződésből.  Támogatott a roundtripping

 Mi történik akkor, ha egy v1.0 kliens beszélget egy v2.0 szolgáltatással, ami egy új tagot adott az adat szerződéshez, amiről a v1.0 kliens nem tud?  Megoldás: IExtensibleDataObject interfész és az adat szerződés implementálási formája.

[DataContract(Namespace = „ public class Task : IExtensibleDataObject { [DataMember(IsRequired=true, Order=1)] public string Description; //… public ExtensionDataObject ExtensionData { get { return _extensionData; } set { _extensionData = value; } } private ExtensionDataObject _extensionData; }

 Két megoldás:  DataContractSerializer  XMLSerializer

 Két attribútum a megvalósítására:  XmlSerializerFormatAttribute  DataContractFormatAttribute  Mindkettőnek van Style property-je, amivel beállítható a SOAP stílusa: Rpc vagy Document.  XMLSerializerFormatAttribute továbbá:  Use property

[ServiceContract()] [XmlSerializerFormar(Style=OperationFormatStyle.Rpc, Use=OperationFormatUse.Encoded)] interface ISomeLegacyService { [OperationContract()] string SomeOp1(string name); } [ServiceContract()] [DataContractFormat(Style=OperationFormatStyle.Rpc)] interface ISomeRpcService2 { [OperationContract()] string SomeOp2(string name); }

 Az alapértelmezett stílus: Document  DataContractSerializer az alap szerializáló.  Ha XMLSerializer-t akarunk használni, akkor azt deklarálni kell.  XMLSerializerFormat Use attribútumánál a Literal az alapételmezett.

 DataContractSerializer előnyei:  Opt-In megközelítés jó irányíthatóságot biztosít az adat szerződések felett.  gyors  A DataContractSerializer képs XML-be szerializálni, azonban sok esetben az eredmény XML nem felel meg a szükségleteknek.  XMLSerializer complex XML sémákat tud kezelni.

 Lépések:  XML séma megtervezése vagy létező minta használata.  Kód generálása a sémából.  Szolgáltatás szerződésben XmlSerializer használatának beállítása.  Szolgáltatás műveletek deklarálása.  /serializer.XmlSerializer opció használata a kliens proxy perspektívából.

 Szerződés létrehozása interfész segítségével  Szerződés implementálása  Szolgáltatás létrehozása  Kliens létrehozása  Kliens konfigurálása  Kliens használata