Blog Null Reference Exception
V článku zde obsahovala třída ExceptionExtensions tuto pomocnou metodu:
V tomto článku jsme si ukázali jak je možné v Silverlight aplikaci ošetřovat výjimky, které vzniknout při zpracování operace WCF služby na serveru. To nám umožní buď zachytit specifickou výjimku, pro kterou ve službě definujeme fault kontrakt nebo pouze přenést na klienta debug informace v případě obecné (neošetřené) výjimky. V obou těchto případech neobsahuje ale výjimka, která je na klientu vyhozená, původní stack trace prováděného asynchronního volání. Nyní ukážu způsob jakým lze i toto řešit.
Silverlight 5.0 pomoci Async Targeting Pack podporuje použití nové syntaxe resp. nových klíčových slov async/await. Pokud ale do Silverlight projektu přidáme referenci na WCF službu není zde podporováno automatické “zaobalení“ asynchronních volání operací WCF služby do metod vracející objekt Task. Toto si musíme udělat sami.
Pokud používáme v Silverlight aplikaci kontrol AutoCompleteBox plněný větším množství prvků (např. nad 1000), setkáme se s výkonnostním problémem, kdy první zobrazení dropdown seznamu je velice pomalé. Toto můžeme spravit jednoduchou úpravou ControlTemplate tohoto kontrolu.
Pro přistup k Oracle Database serveru z .NETu jsme mohli používat ADO.NET třídy v namespace System.Data.OracleClientv assembly System.Data.OracleClient.dll. Tento namespace je však od FW 4.0 označen za deprecated (zastaralý). Microsoft ho už nepodporuje, a dá se očekávat, že bude v některé následující verzi .NET Frameworku odstraněn úplně (nicméně ve verzi 4.5 se tak ještě nestalo).
V msdn se dočtete, že jako náhradu máme používat third-party provider přímo od Oracle. Tento provider se jmenuje Oracle Data Provider for .NET, zkráceně ODP.NET. Provider je obsažen v assembly Oracle.DataAccess.dll a jeho třídy jsou v namespace Oracle.DataAccess.Client.
V každé Silverlight aplikaci musíme zpravidla nějakým způsobem řešit ošetřování chyb vznikajících na serverové straně při volání operací WCF služby. V tomto článku se nebudu rozepisovat o tom jak ošetřování chyb ve WCF funguje a jaké jsou obecně možnosti a způsoby řešení, jen dodávám, že se celkově nejedná o triviální problém (v Silverlightu jsme navíc omezeni například tím, že výjimky nelze serializovat apod.) Místo toho zde předložím jeden způsob, který v poslední době docela úspěšně používám.
Pokud v Silverlight aplikaci používáte validaci dat pomoci interface IDataErrorInfo nebo INotifyDataErrorInfo, je zde možné pro jednu vlastnost nastavit najednou více chybových zpráv (například že heslo je krátké a že zároveň neodpovídá požadovaným zásadám pro tvorbu hesel). Možná jste si ale všimli, že v takovém případě standardní kontroly ve validačním tooltipu zobrazují pouze chybu jedinou (tu první).
Toto můžeme napravit změnou šablony pro zobrazení tohoto tooltipu.
Operační systém Windows již několik verzí zpět obsahuje podporu pro změnu letního a standardního času. Pokud by jsme tedy ve své aplikaci potřebovali využít informace týkajících se změny na letní čas (daylight saving time – DST), je možné je získat přímo ze systému. To může být výhodné z toho důvodu, že pokud by došlo ke změně okamžiku, kdy se změna času provádí, Microsoft přes Windows Update vydá aktualizaci, která tuto případnou změnu zohlední a my se nemusíme o nic starat.
K zjištění verze operačního systému slouží v .NET Frameworku třída OperatingSystem dostupná voláním Environment.OSVersion. Její vlastnost VersionString vrací popis operačního systému například takto: “Microsoft Windows NT 6.1.7601 Service Pack 1” (Windows NT zde označuje celou platformu Win32NT). Lepší popis namísto toho by ovšem byl tento: “Windows Server 2008 R2 Enterprise Service Pack 1 (Build 7601)”, a přesně to vrací třída OsVersionInfo, kterou si zde ukážeme.
V tomto článku si na velmi jednoduchém příkladu vysvětlíme princip vykonávání kódu používající novou syntaxi jazyka C# 5.0 async/await.