Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A ExpectedExceptions minta bemutatja, hogyan lehet elkapni a várt kivételeket egy beírt ügyfél használatakor. Ez a minta a számológép szolgáltatást megvalósító Első lépések részen alapul. Ebben a mintában az ügyfél egy konzolalkalmazás (.exe), és a szolgáltatást az Internet Information Services (IIS) üzemelteti.
Megjegyzés:
A minta telepítési eljárása és összeállítási utasításai a témakör végén találhatók.
Ez a minta bemutatja, hogyan kell a helyes programoknak kezelniük a két elvárt kivételtípust: TimeoutException és CommunicationException.
A Windows Communication Foundation (WCF) ügyfél kommunikációs módszereiből eredő kivételek várhatók vagy váratlanok. A váratlan kivételek közé tartoznak a katasztrofális hibák, például OutOfMemoryException a programozási hibák, például ArgumentNullException vagy InvalidOperationException. A váratlan hibák kezelésére általában nincs hasznos módszer, ezért a WCF-ügyfélkommunikációs módszer hívása során általában nem érdemes őket elkapni.
A WCF-ügyfél kommunikációs módszereitől várt kivételek közé tartozik a TimeoutException, a CommunicationException, és bármely CommunicationException származtatott osztály. Ezek olyan problémát jeleznek a kommunikáció során, amely a WCF-ügyfél megszakításával és kommunikációs hiba jelentésével biztonságosan kezelhető. Mivel a külső tényezők bármilyen alkalmazásban okozhatják ezeket a hibákat, a helyes alkalmazásoknak el kell kapniuk ezeket a kivételeket, és helyre kell állítaniuk őket, amikor előfordulnak.
Az ügyfél több CommunicationException származtatott osztályt is dobhat. Bizonyos esetekben az alkalmazások is elkapnak néhányat ezek közül, hogy speciális kezelést végezzenek, de a többit úgy kezelik, mint egy CommunicationException. Ezt úgy teheti meg, hogy először a pontosabb kivételtípust, majd később egy fogási záradékban elkapja CommunicationException.
Az ügyfélkommunikációs metódust hívó kódnak el kell kapnia a TimeoutException és CommunicationException kivételt. Az ilyen hibák kezelésének egyik módja az ügyfél leállása és a kommunikációs hiba bejelentése.
try
{
...
double result = client.Add(value1, value2);
...
client.Close();
}
catch (TimeoutException exception)
{
Console.WriteLine("Got {0}", exception.GetType());
client.Abort();
}
catch (CommunicationException exception)
{
Console.WriteLine("Got {0}", exception.GetType());
client.Abort();
}
Ha egy várható kivétel bekövetkezik, utána lehet, hogy az ügyfél használható lesz, vagy lehet, hogy nem. Annak megállapításához, hogy a kliens továbbra is használható-e, ellenőrizze, hogy a State tulajdonság CommunicationState. Megnyitott állapotban van. Ha még mindig meg van nyitva, akkor továbbra is használható. Ellenkező esetben meg kell szüntetned a klienst, és fel kell szabadítanod az összes rá mutató hivatkozást.
Figyelmeztetés
Megfigyelheti, hogy a munkamenetet tartalmazó ügyfelek gyakran már nem használhatók kivétel után, és a munkamenetet nem tartalmazó ügyfelek gyakran továbbra is használhatók a kivétel után. Ezek közül azonban egyik sem garantált, ezért ha egy kivétel után szeretné folytatni az ügyfél használatát, az alkalmazásnak ellenőriznie kell a State tulajdonságot, hogy az ügyfél továbbra is nyitva van-e.
A minta futtatásakor a műveleti válaszok és a kivételek megjelennek az ügyfélkonzol ablakában.
Az ügyfélfolyamat két forgatókönyvet futtat, amelyek mindegyike megpróbálja meghívni a következőt Add, majd a Divide. Az első forgatókönyv egy hálózati problémát szimulál azzal, hogy leállítja a klienst a hívás kezdeményezése előtt Divide. A második forgatókönyv időtúllépési feltételt okoz, ha túl rövidre állítja az időtúllépést a metódus befejezéséhez. Az ügyfélfolyamat várt kimenete a következő:
Add(100,15.99) = 115.99
Simulated network problem occurs...
Got System.ServiceModel.CommunicationObjectAbortedException
Add(100,15.99) = 115.99
Set timeout too short for method to complete...
Got System.TimeoutException
A példa beállítása, elkészítése és futtatása
Győződjön meg arról, hogy elvégezte a Windows Communication Foundation-minták One-Time beállítási eljárását.
A megoldás C# vagy Visual Basic .NET kiadásának létrehozásához kövesse Windows Communication Foundation-mintákcímű témakör utasításait.
Ha a mintát egy vagy több gép közötti konfigurációban szeretné futtatni, kövesse A Windows Communication Foundation-minták futtatásacímű témakör utasításait.