Aracılığıyla paylaş


Beklenen Özel Durumlar

ExpectedExceptions örneği, yazılan bir istemci kullanılırken beklenen özel durumların nasıl yakalanacaklarını gösterir. Bu örnek, hesap makinesi hizmeti uygulayan Başlarken'i temel alır. Bu örnekte istemci bir konsol uygulamasıdır (.exe) ve hizmet Internet Information Services (IIS) tarafından barındırılır.

Not

Bu örnek için kurulum yordamı ve derleme yönergeleri bu konunun sonunda yer alır.

Bu örnek, doğru programların işlemesi gereken beklenen iki özel durum türünün yakalanmasını ve işlenmesini gösterir: TimeoutException ve CommunicationException.

Windows Communication Foundation (WCF) istemcisinde iletişim yöntemlerinden oluşan özel durumlar beklenir veya beklenmeyendir. Beklenmeyen özel durumlar, veya gibi OutOfMemoryExceptionArgumentNullExceptionInvalidOperationExceptionyıkıcı hataları ve programlama hatalarını içerir. Genellikle beklenmeyen hataları işlemenin kullanışlı bir yolu yoktur, bu nedenle genellikle WCF istemci iletişim yöntemini çağırırken bunları yakalamamalısınız.

WCF istemcisinde iletişim yöntemlerinden beklenen özel durumlar , CommunicationExceptionve türetilmiş herhangi bir sınıfıdır.TimeoutExceptionCommunicationException Bunlar, iletişim sırasında WCF istemcisini durdurup bir iletişim hatası bildirerek güvenli bir şekilde işlenebilen bir sorunu gösterir. Dış faktörler herhangi bir uygulamada bu hatalara neden olabileceği için, doğru uygulamaların bu özel durumları yakalaması ve oluştuğunda kurtarması gerekir.

İstemcinin CommunicationException oluşturabileceği çeşitli türetilmiş sınıfları vardır. Bazı durumlarda, uygulamalar özel işleme yapmak için bunlardan bazılarını da yakalar, ancak diğerlerinin olarak CommunicationExceptionişlenmesine izin verir. Bu, önce daha belirli bir özel durum türünü yakalayıp daha sonraki bir catch-yan tümcesinde yakalayarak CommunicationException gerçekleştirilebilir.

İstemci iletişim yöntemini çağıran kodun ve CommunicationException'yi yakalaması TimeoutException gerekir. Bu tür hataları işlemenin bir yolu, istemciyi durdurmak ve iletişim hatasını bildirmektir.

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

Beklenen bir özel durum oluşursa, istemci daha sonra kullanılabilir olabilir veya olmayabilir. İstemcinin hala kullanılabilir olup olmadığını belirlemek için özelliğinin State olup CommunicationStateolmadığını denetleyin. Açıldı. Hala açıksa, hala kullanılabilir durumdadır. Aksi takdirde istemciyi durdurmanız ve ona yapılan tüm başvuruları serbest bırakmanız gerekir.

Dikkat

Oturumu olan istemcilerin genellikle bir özel durumdan sonra kullanılamadığını ve oturumu olmayan istemcilerin genellikle bir özel durumdan sonra hala kullanılabilir olduğunu gözlemleyebilirsiniz. Ancak, bunların hiçbiri garanti edilmemektedir, bu nedenle bir özel durumdan sonra istemciyi kullanmaya devam etmek istiyorsanız uygulamanızın istemcinin State hala açık olduğunu doğrulamak için özelliğini denetlemesi gerekir.

Örneği çalıştırdığınızda, işlem yanıtları ve özel durumlar istemci konsolu penceresinde görüntülenir.

İstemci işlemi iki senaryo çalıştırır ve bunların her biri tarafından çağrılmaya AddDivideçalışılır. İlk senaryo, çağrısı yapmadan önce istemciyi durdurarak bir ağ sorununun benzetimini Divideyapıyor. İkinci senaryo, yöntemin tamamlanması için zaman aşımını çok kısa ayarlayarak zaman aşımı koşuluna neden olur. İstemci işleminden beklenen çıkış:

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

Örneği ayarlamak, derlemek ve çalıştırmak için

  1. Windows Communication Foundation Örnekleri için Tek Seferlik Kurulum Yordamı'nı gerçekleştirdiğinizden emin olun.

  2. Çözümün C# veya Visual Basic .NET sürümünü oluşturmak için Windows Communication Foundation Örnekleri Oluşturma başlığındaki yönergeleri izleyin.

  3. Örneği tek veya makineler arası bir yapılandırmada çalıştırmak için Windows Communication Foundation Örneklerini Çalıştırma başlığındaki yönergeleri izleyin.