100 likes | 199 Views
Haladó Programozás. WCF kivételkezelés. Haladó Programozás. Windows Communication Foundation A szolgáltatás, a hoszt és az ügyfél elkészítése. 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:
E N D
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 OE-NIK HP
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) OE-NIK HP
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<MyFaultException>(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 OE-NIK HP
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;}} OE-NIK HP
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<BMIFaultException>( 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< BMIServiceReference.BMIFaultException> fex) 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. OE-NIK HP
Irodalomjegyzék • http://www.extremeexperts.com/Net/Articles/ExceptionHandlingInWCF.aspx • http://www.c-sharpcorner.com/uploadfile/ankithakur/exception-handling-in-wcf-using-fault-contract/ • http://blogs.msdn.com/b/brajens/archive/2007/04/23/exception-handling-in-wcf-web-service.aspx OE-NIK HP