Sdílet prostřednictvím


Očekávané výjimky

Ukázka ExpectedExceptions ukazuje, jak zachytit očekávané výjimky při použití zadaného klienta. Tato ukázka vychází ze služby Začínáme , která implementuje službu kalkulačky. V této ukázce je klient konzolovou aplikací (.exe) a služba je hostovaná internetovou informační službou (IIS).

Poznámka:

Postup nastavení a pokyny k sestavení pro tuto ukázku najdete na konci tohoto tématu.

Tato ukázka ukazuje zachycení a zpracování dvou očekávaných typů výjimek, které správné programy musí zpracovat: TimeoutException a CommunicationException.

Výjimky vyvolané metodami komunikace v klientovi WCF (Windows Communication Foundation) jsou buď očekávané, nebo neočekávané. Mezi neočekávané výjimky patří závažné selhání, jako jsou chyby programování, například OutOfMemoryExceptionArgumentNullException nebo InvalidOperationException. Obvykle neexistuje žádný užitečný způsob, jak zpracovat neočekávané chyby, takže byste je obvykle neměli zachytit při volání metody komunikace klienta WCF.

Mezi očekávané výjimky z komunikačních metod klienta WCF patří TimeoutException, CommunicationExceptiona všechny odvozené třídy CommunicationException. To značí problém během komunikace, který je možné bezpečně zpracovat přerušením klienta WCF a hlášením selhání komunikace. Vzhledem k tomu, že externí faktory můžou způsobit tyto chyby v libovolné aplikaci, musí správné aplikace tyto výjimky zachytit a obnovit, když dojde k jejich výskytu.

Existuje několik odvozených CommunicationException tříd, které může klient vyvolat. V některých případech aplikace také přijímají některé z nich pro speciální zpracování, zatímco ostatní nechávají zpracovávat jako CommunicationException. Toho lze dosáhnout zachycením konkrétnějšího typu výjimky a následným zachycením CommunicationException v pozdější klauzuli catch-clause.

Kód, který volá metodu komunikace klienta, musí zachytit znak TimeoutException a CommunicationException. Jedním ze způsobů, jak tyto chyby vyřešit, je přerušit klienta a nahlásit selhání komunikace.

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();
}

Pokud dojde k očekávané výjimce, klient může nebo nemusí být následně použitelný. Pokud chcete zjistit, jestli je klient stále použitelný, zkontrolujte, zda je vlastnost StateCommunicationState. Otevřená. Pokud je stále otevřený, je stále použitelný. Jinak byste měli klienta přerušit a uvolnit všechny odkazy na něj.

Upozornění

Můžete si všimnout, že klienti, kteří mají relaci, po výjimce často nejsou použitelní, zatímco klienti, kteří relaci nemají, jsou po výjimce často stále použitelní. Žádná z těchto možností však není zaručená, takže pokud chcete pokračovat v používání klienta po výjimce, měla by aplikace zkontrolovat State vlastnost, zda je klient stále otevřen.

Při spuštění ukázky se odpovědi na operace a výjimky zobrazí v okně konzoly klienta.

Proces klienta spouští dva scénáře, z nichž každý se pokusí volat Add a následně Divide. První scénář simuluje problém se sítí přerušením klienta před voláním Divide. Druhý scénář způsobí podmínku časového limitu nastavením časového limitu příliš krátkého na dokončení metody. Očekávaný výstup z procesu klienta je následující:

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

Jak nastavit, sestavit a spustit ukázku

  1. Ujistěte se, že jste provedli instalační proceduru One-Time pro ukázky Windows Communication Foundation.

  2. Pokud chcete sestavit verzi C# nebo Visual Basic .NET řešení, postupujte podle pokynů v Sestavení ukázek Windows Communication Foundation.

  3. Pokud chcete spustit ukázku v konfiguraci pro jeden počítač nebo pro více počítačů, postupujte podle pokynů v Spuštění ukázek Windows Communication Foundation.