Poison iletileri kaldırma
A zehirli ileti olan bir uygulamayı başarıyla işleyemiyor bilgilerini içeren bir ileti.Örneğin, üretim iş istasyonu yalnızca sırasını değiştir bölümü geçersiz kılar önce bir bölümünü stoktan geri alma için bir istek gönderebilirsiniz.İstek için stok aktarma durumundayken sırasını değiştir etkili olacaktır.Stok Yönetimi uygulama isteği alır iş istasyonu, ancak hisse senedi başarısız bölümlerinde numarasını güncelleştirmek için istek ve veritabanı işlemi başarıyla işleyemiyor.Sonra alma işlemi içeren işlem, geri, sıraya ileti vermeden alınır.Bu durumda, uygulamanın aynı ileti almaya devam eder, güncelleştirme başarısız olmaya devam ve ileti sırasına gönderir.
zehirli ileti, bozuk bir ileti değil ve geçersiz bir istek olabilir.Hizmet Aracısı bozuk iletileri algılamak ileti bütünlük denetimleri içerir.Bir uygulama da genelde iletinin içeriğini doğrular ve yasadışı bir isteği içeren bir ileti atar.Buna karşılık, ileti oluşturuldu, ancak daha sonra işleme imkansız oldu birçok zarar iletisi geçerli.
Otomatik Poison Message algılama
Hizmet Aracısı zehirli ileti otomatik algılama sağlar.Beş kez Al deyim içeren bir hareketi geri alır, hareket, gelen iletileri otomatik olarak sıra durumu Kapalı olarak ayarlayıp alınan tüm sıraları Hizmet Aracısı devre dışı bırakır.Buna ek olarak, Hizmet Aracısı olay türü oluşturur Broker:Queue Disabled.
Yönetici kullanabilir SQL Server Aracısı uyarılar yaparken bir sıra haberdar için devre dışı bırakıldı.Bir uygulama geliştiricisi tarafından Hizmet Aracısı sıra 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şlenemez belirler application on sıra durumunu ayarlar sonra iletinin bir hata ile konuşma bitiş.Zarar iletisi algılayan bir uygulama ile yapılan görüşme, görüşme sona ilişkili herhangi bir duruma kadar temizlemek dikkatli olmanız gerekir.Zarar iletilerden kurtarmak için uygulama oluşturma hakkında daha fazla bilgi için bkz: Poison iletileri işleme.
Yönetici tarafından poison iletileri kaldırma
Çoğu uygulama izleme ve programlı olarak zarar iletileri Kaldır.Ancak, bazı durumlarda zehirli ileti el ile kaldırmak gerekli olabilir.Örneğin, Kurtarma yapan uygulamanın parçası algılamak mümkün olmayabilir zehirli ileti, ya da görüşme için kaydedilmiş durumunu güvenle temizlemek mümkün olmayabilir.
Bir iletiyi el ile kaldırma önemli bir konuşma engellemeden riski çalıştırılır.Bu nedenle, her zaman zehirli ileti iletiyi sıradan kaldırarak önce inceleyin.İletinin içeriğini görmek için bir hareketi başlatmak, ileti gövdesini almak, ileti gövdesini görüntülemek ve hareket geri almak almak alabilir.Söz konusu iletiyi zehirli ileti olduğunu pozitif kadar hareketi geri almak önemlidir.
Örnek
Aşağıdaki örnek konuşma tanıtıcısı için güvenli bir ileti incelemek nasıl gösterir e29059bb-9922-40f4-a575-66b2e4c70cf9 sıradaki ExpenseQueue.
use AdventureWorks2008R2 ;
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 ;
-- Roll back 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
zehirli ileti bulduğunuzda, konuşmayı sona erdirmek.Aşağıdaki örnek konuşma sona 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 sona erdiğinde Hizmet Aracısı iletileri bu görüşme için atar.İleti normalde işleyen uygulama alma bildirimi bir EndDialog veya hata bu görüşme için ileti.Uygulamanın durumunu korur, bu nedenle, bir hata ile konuşma bitiş sonra konuşma ile ilişkili durumu kaldırmak dikkatli olmanız gerekir.
hizmet bir iletiyi işleyemiyor, bu hizmet görüşme için görevi tamamlayamıyor anlamına gelir.Bir hata ile konuşma bitiş diğer bildirir katılımcı görüşmesinde görev başarısız oldu.