Megosztás a következőn keresztül:


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 TimeoutExceptiona , 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 CommunicationExceptiona 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 AddDivide: . Az első forgatókönyv egy hálózati problémát szimulál, ha megszakítja az ügyfelet a hívás Dividemegkezdé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

  1. 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.

  2. 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.

  3. 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.