Aracılığıyla paylaş


Poison iletiler kaldırılıyor

C zehirli ileti uygulamanın başarıyla işleyemiyor bilgilerini içeren bir iletidir.Örneğin, üretim iş istasyonu isteği yalnızca bir değişikliği emri bölümü geçersiz kılar, önce stoktan bir bölümü geri gönderme.Değişiklik sipariş, stok isteği yolda iken etkili olur.Stok yönetimi uygulaması iş istasyonundan isteği alır, ancak başarılı bir şekilde isteği işleyemiyor; stoktaki bölümlerinin sayısını güncelleştirmek için veritabanı işlemi başarısız olur.Sonra alma işlemi içeren işlem geri, iletinin sıraya döndürülüyor toplar.Bu durumda, uygulama aynı iletiyi almaya devam eder, güncelleştirmenin başarısız olmaya devam eder ve sıraya ileti verir.

Bir zehirli ileti, bozuk bir ileti değil ve geçersiz bir istek olabilir.Hizmet Aracısı, bozuk iletilerin algılamak ileti bütünlük denetimleri içerir.Bir uygulama da genellikle, bir iletinin içeriği doğrulama ve geçersiz bir isteği içeren bir iletiyi atar.Buna ek olarak, iletinin oluşturuldu, ancak daha sonra işleme imkansız olur, pek çok zararlı iletileri geçerli bulunuyordu.

zehirli ileti için otomatik algılama

Hizmet Aracısı otomatik zehirli ileti algılama sağlar.Geri Al bir deyim içeren bir hareket beş kez yuvarlandığında hareketin sıra durumunu KAPALı otomatik olarak ayarlayarak, gelen iletileri alınan tüm sıraları Hizmet Aracısı devre dışı bırakır.Buna ek olarak, Hizmet Aracısı tür olay üretir. Broker:Queue Disabled.

Bir yönetici tarafından kullanabilecek SQL Server Bir sıra devre dışı bırakıldığında bildirimde bulunulmak üzere Aracısı uyarıları. Bir uygulama geliştiricisi, sıra Hizmet Aracısı'tarafından devre dışı bırakıldığında, algılayan bir uygulama da oluşturabilirsiniz.Bu uygulama genelde zehirli ileti bulmak için sıradaki iletilerin inceler.Uygulama ileti işlenemiyor belirler, uygulama ON sıra durumunu ayarlar ve görüşmeyi iletinin bir hata ile sona erdirir.Zararlı iletileri algılayan bir uygulama ile görüşme, görüşmeyi sonlandırırken ilişkili tüm durumunu temizlemeye dikkatli olmanız gerekir.Zararlı iletileri kurtarmak için uygulama oluşturma hakkında daha fazla bilgi için bkz: Zarar iletisi işleme.

Poison iletileri bir yönetici tarafından kaldırılıyor

Çoğu uygulama izlemek ve zararlı iletilerini program aracılığıyla kaldırın.Ancak, bazen kaldırmak gerekli olabilir bir zehirli ileti el ile.Örneğin, Kurtarma yapan uygulama bölümü zehirli ileti algılayamayabilir olmayabilir veya Güvenli konuşmayı kaydedilmiş durumunu temizlenmesini mümkün olmayabilir.

Iletiye el ile kaldırmak için önemli bir görüşmeyi kesintiye uğratmasını riski çalışır.Bu nedenle, her zaman bir zehirli ileti iletiyi sıradan kaldırılmadan önce inceleyin.Iletinin içeriğini görmek için , bir işlem başlatmak, ileti gövdesini almak, ileti gövdesini görüntülemek ve daha sonra hareketi geri almak almak.Söz konusu iletiyi olduğunu pozitif kadar bir zehirli ileti, işlemi geri almak önemlidir.

Örnek

Aşağıdaki örnek, bir ileti için güvenli konuşma tanıtıcısı incelemek nasıl gösterir. e29059bb-9922-40f4-a575-66b2e4c70cf9 sırada ExpenseQueue.

use AdventureWorks ;
GO

-- Sample to show the content of a message, then return
-- the message to the queue. This may be useful to determine
-- whether a specific message cannot be processed due to the
-- content of the message.

-- Every exit path from the transaction rolls back the transaction.
-- This code is intended to inspect the message, not remove the
-- message from the queue permanently. The transaction must roll
-- back to return the message to the queue.

BEGIN TRANSACTION ;

  -- To print the body, the code needs the message_body and
  -- the encoding_format.

  DECLARE @messageBody VARBINARY(MAX),
          @validation NCHAR ;

  -- Receive the message. The WAITFOR handles the case where
  -- an application is attempting to process the message when
  -- this batch is submitted. Replace the name of the queue and
  -- the conversation_handle value.

  WAITFOR(
    RECEIVE TOP(1) 
            @messageBody = message_body,
            @validation = validation
      FROM dbo.ExpenseQueue
      WHERE conversation_handle =
           'e29059bb-9922-40f4-a575-66b2e4c70cf9'
  ), TIMEOUT 2000 ;

  -- Rollback and exit if the message is not available
  -- in two seconds.

  IF @@ROWCOUNT = 0
    BEGIN
      ROLLBACK TRANSACTION ;
      PRINT 'No message available.' ;
      RETURN ;
    END

  -- Print the message based on the encoding format of
  -- the message body.

  IF (@validation = 'E')
    BEGIN
      PRINT 'Empty message.' ;
    END ;
  ELSE IF (@validation = 'X')
    BEGIN
      PRINT CONVERT(nvarchar(MAX), @messageBody) ;
    END ;
  ELSE IF (@validation = 'N')
    BEGIN
      PRINT 'No validation -- binary message:'
      PRINT @messageBody ;
    END

ROLLBACK TRANSACTION
GO

Zararlı bir ileti gördüğünüzde, konuşmayı sona erdirmek.Aşağıdaki örnek konuşmayı sona erdirir. e29059bb-9922-40f4-a575-66b2e4c70cf9.

-- End the conversation. Do this only if the message cannot be
-- processed by the normal procedure.

END CONVERSATION 'e29059bb-9922-40f4-a575-66b2e4c70cf9'
    WITH ERROR = 127 DESCRIPTION = N'Unable to process message.' ;
GO

Konuşma bittiğinde, Hizmet Aracısı bu konuşmaya iletilerde atar.Normalde, iletiyi işleyen uygulama alma bildirimi bir EndDialog or Hata iletinin bu konuşmaya.Bu nedenle, uygulama durumunda saklar, görüşme, görüşmeyi bir hata ile biten sonra ilişkili durumunu kaldırmak dikkatli olmalısınız.

Bir hizmet, ileti işleyemiyor, bu hizmet görüşmeyi görevi tamamlayamıyor anlamına gelir.Görüşmeyi bir hata ile biten görev başarısız iletişimindeki diğer katılımcı bildirir.