Aracılığıyla paylaş


Kalıcı Client-Side Hataları

Bazı durumlarda Message Queuing iletiyi hedef kuyruğa taşıyabilir. Örneğin, kuyruk erişim denetimleri iletinin istemciden sunucuya taşınmasına izin vermiyorsa, sorunlu ileti istemci tarafı teslim edilemeyen ileti kuyruğuna taşınır. Bu durumda, COM+ kuyruğa alınan bileşenler hizmeti bir özel durum sınıfının bir bileşenle ilişkilendirilmesine izin verir. Özel durum sınıfını bileşenle ilişkilendirmek için Bileşen Hizmetleri yönetim aracının bileşen özellikleri sayfasındaki gelişmiş sekmesini kullanın. Ayrıca, COM+ Yönetim işlevlerinin ExceptionClass katalog bileşeni özniteliğini kullanarak özel durum sınıfını program aracılığıyla ilişkilendirebilirsiniz.

Özel durum sınıfı, IPlaybackControluygulayan bir bileşenin ProgID'si veya CLSID'si olarak tanımlanır. Kuyruğa alınan bileşenler hizmetinin, Xact teslim edilemeyen ileti kuyruğunu tarayen bir teslim edilemeyen ileti kuyruğu izleyicisi vardır. Kuyrukta bir ileti varsa, teslim edilemeyen ileti kuyruğu izleyicisi hedef bileşenle ilişkilendirilmiş özel durum işleyicisini oluşturur ve istemci tarafı, kurtarılamaz bir hata olduğunu belirten IPlaybackControl::FinalClientRetryçağırır.

IPlaybackControlek olarak, özel durum işleyicisi özel durumları işlemekte olduğu sunucu bileşeniyle aynı arabirim kümesini uygulamalıdır. IPlaybackControl::FinalClientRetry çağrıldığında, kuyruğa alınan bileşenler çalışma zamanı başarısız iletiyi özel durum işleyicisine geri yürütür. Bu, özel durum işleyicisinin sunucuya taşınamayan iletiler için alternatif bir davranış uygulamasına olanak tanır( örneğin, bir telafi işlemi oluşturarak).

Özel durum işleyicisi tüm yöntem çağrılarını tamamlarsa, ileti Xact teslim edilemeyen ileti kuyruğundan kaldırılır ve kapatılır. Ancak, özel durum işleyicisi yöntem çağrılarından birinden hata durumu döndürerek iletiyi durdurursa, ileti Xact teslim edilemeyen ileti kuyruğuna döndürülür. Aşağıdaki olay dizisi istemci tarafı özel durumlarının nasıl işleneceğini gösterir:

  1. Message Queuing, sunucuya ileti teslim edilemiyor ve iletiyi Xact teslim edilemeyen ileti kuyruğuna yerleştirir.
  2. Teslim edilemeyen ileti kuyruğu dinleyicisi (DLQL), Xact teslim edilemeyen ileti kuyruğunda bir ileti bulur.
  3. DLQL, iletiden hedef bileşen CLSID'yi alır ve özel durum sınıfını denetler.
  4. DLQL, özel durum sınıfını başlatır.
  5. DLQL, özel durum sınıfı için IPlaybackControl sorgular.
  6. DLQL, özel durum sınıfında IPlaybackControl::FinalClientRetry yöntemini çağırır.
  7. DLQL, iletiden özel durum sınıfına yapılan tüm özellik ve yöntem çağrılarını geri alır.
  8. DLQL, özel durum işleyicisi işlemi başarıyla tamamlarsa iletiyi siler. Özel durum işleyicisi IObjectContext::SetAbortverebilir ve ileti teslim edilemeyen ileti kuyruğunda kalır.

Yukarıdaki adımlardan herhangi biri başarısız olursa, ileti Xact teslim edilemeyen ileti kuyruğunda bırakılır.

Başlatıldığında, DLQL Message Queuing işlem teslim edilemeyen ileti kuyruğundaki her iletiyi okur ve kuyruğa alınan her bileşen iletisi için özel durum sınıfını başlatır. Kuyrukta bir geçiş yaptıktan sonra yeni iletileri bekler. Daha sonra her yeni teslim edilemeyen ileti kuyruğu iletisini geldikçe işler.

Burada açıklanan işleme müdahale etmeniz gerekiyorsa veya bir zehirli iletiyi son bekleme kuyruğundan taşımanız gerekiyorsa, ileti taşıyıcı yardımcı programını kullanın. İleti taşıyıcı yardımcı programı hakkında daha fazla bilgi için bkz. İşleme Hataları.

Client-Side Hataları

Server-Side Hataları