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
V1.0 Kivételkezelés WCF-ben Ha nem kezeljük a hibákat, akkor azok a szerverről a kliensre kerülnek. A kliens futása leáll a következő hibaüzenettel: –CommunicationException - the server did not provide a meaningful reply; this might have been caused due to a contract mismatch, a premature session shutdown or an internal server error. –Egy ilyen után a kommunikációs csatorna nem használható tovább. A kommunikációs csatorna fenntartásához a SOAP-nak megfelelő kivételkezelést kell alkalmazni. Ennek lehetőségei: –returnUnknownExceptionsAsFaults / [ServiceBehavior(IncludeExceptionDetailInFaults=true)]: Minden kivétel becsomagolódik és mint Soap Fault átkerül a kliensre. Érzékeny adatokat is átküld, így csak debugolásnál ajánlott használni –IErrorHandler Minden kivételt elkapunk a szerveren, naplózzuk és esetleg továbbdobjuk Fault Exception- ként –FaultException (ezt használjuk a továbbiakban) 3 OE-NIK HP
V1.0 SOAP Fault A SOAP-ban definiált hibával kapcsolatos mezők: –faultcode: kötelező, karakterlánc általában a hibakódok egyikével kezdődik: Server: a hiba a szerverben volt, az üzenet újbóli elküldése sikerre vezethet Client: a hiba az üzenet tartalmában vagy formátumában van, nem érdemes újra próbálkozni –faultstring: olvasható formában írja le a hiba okát –faultactor: tájékoztat, hogy hol következett be a hiba az üzenet útja során A FaultException a WCF-ben definiált típus a Soap Fault létrehozására Bármilyen objektum becsomagolható ezzel Soap Faulttá –new FaultException (myfe,faultReason,faultCode); myfe: becsomagolandó objektum faultReason: további információ küldése a kivételről faultCode: megfelel a SOAP feultcode mezőjének 4 OE-NIK HP
V1.0 Kivételkezelési információk a szerződésben A WCF szerződésnek tartalmaznia kell a kivételkezelésre vonatkozó információkat [OperationContract] [FaultContract(typeof(BMIFaultException))] double GetBMI(double weight, double height); –Ha a szerződés nem tartalmazza a FaultContract információt, akkor a kliens mindent unknowfaultexceptions kivételként kap el –A FaultContract információ megjelenik a szolgáltatás wsdl-jében Saját objektumot érdemes átdobni, hogy a megfelelő adatokat adjuk át –A átdobandó objektum osztályát a szerződésben definiáljuk [DataContract] public class BMIFaultException { [DataMember] public string Message{get;set;} } 5 OE-NIK HP
V1.0 Kivétel dobása és elkapása A saját objektum létrehozása utána A FaultException generikus osztályból hozunk létre egy példányt Érdemes megadni a faultreasont és a faultcode-ot is –BMIFaultException error = new BMIFaultException(); error.Message = "Zero value passed for height“; throw new FaultException ( error, new FaultReason(ex.StackTrace), new FaultCode("Client.DivideByZero")); A kivétel elkapása a szokásos módon történik –catch (System.ServiceModel.FaultException fex) 6 OE-NIK HP
V1.07 OE-NIK HP Feladat Készítsünk webszolgáltatást, amely a testtömegindexet (Body Mass Index) adja meg a súly és a testmagasság alapján –BMI=súly/magasság/magasság (súly kilogramban, magasság méterben) –Dobjon a szerver kivételt, ha a magasság kisebb, mint 0,5 m vagy nagyobb mint 2,5 m. –Dobjuk át a kivételt, amit nullával való osztáskor kapunk. –Minden egyéb kivételnek dobjuk át az üzenetét a kliensnek. –A kliens kezelje az átdobott kivételeket.
V1.08 OE-NIK HP Irodalomjegyzék gInWCF.aspx sharpcorner.com/uploadfile/ankithakur/exception-handling-in- wcf-using-fault-contract/ -handling-in-wcf-web-service.aspx
OE-NIK HP