Várt kivételek
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éseken alapul. Ebben a mintában az ügyfél egy konzolalkalmazás (.exe), és a szolgáltatást az Internet Information Services (IIS) üzemelteti.
Feljegyzé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, hogy a megfelelő programoknak milyen két kivételtípust kell kezelnie és kezelnie: 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 TimeoutException
a , CommunicationException
és a származtatott osztály.CommunicationException
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élnek több származtatott osztálya CommunicationException
is van. 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 a .CommunicationException
Ezt úgy teheti meg, hogy először a pontosabb kivételtípust, majd egy későbbi fogási záradékban elkapja CommunicationException
.
Az ügyfélkommunikációs metódust hívó kódnak tartalmaznia kell az és CommunicationException
a TimeoutException
. 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 várható kivétel történik, az ügyfél később is használhatja vagy nem használhatja. Annak megállapításához, hogy az ügyfél továbbra is használható-e, ellenőrizze, hogy a State
tulajdonság valóban használható-e CommunicationState
. Kinyitott. Ha még mindig meg van nyitva, akkor továbbra is használható. Ellenkező esetben le kell szakítanod az ügyfelet, és fel kell szabadítanod az összes rá mutató hivatkozást.
Figyelemfelhívá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
Divide
: . Az első forgatókönyv egy hálózati problémát szimulál, ha megszakítja az ügyfelet a hívás Divide
megkezdése előtt. 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 minta beállítása, összeállítása és futtatása
Győződjön meg arról, hogy elvégezte a Windows Communication Foundation-minták egyszeri 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 a Windows Communication Foundation-minták készítéséhez szükséges utasításokat.
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ásával kapcsolatos utasításokat.