67 lines
2.4 KiB
C#
67 lines
2.4 KiB
C#
|
//-----------------------------------------------------------------------------
|
||
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
//-----------------------------------------------------------------------------
|
||
|
namespace System.ServiceModel.Channels
|
||
|
{
|
||
|
using System.Runtime;
|
||
|
using System.ServiceModel.Diagnostics.Application;
|
||
|
|
||
|
sealed class Msmq4SubqueuePoisonHandler : IPoisonHandlingStrategy
|
||
|
{
|
||
|
MsmqReceiveHelper receiver;
|
||
|
|
||
|
public Msmq4SubqueuePoisonHandler(MsmqReceiveHelper receiver)
|
||
|
{
|
||
|
this.receiver = receiver;
|
||
|
}
|
||
|
|
||
|
public void Open()
|
||
|
{ }
|
||
|
|
||
|
public bool CheckAndHandlePoisonMessage(MsmqMessageProperty messageProperty)
|
||
|
{
|
||
|
if (messageProperty.AbortCount > this.receiver.MsmqReceiveParameters.ReceiveRetryCount)
|
||
|
{
|
||
|
if (TD.ReceiveRetryCountReachedIsEnabled())
|
||
|
{
|
||
|
TD.ReceiveRetryCountReached(messageProperty.MessageId);
|
||
|
}
|
||
|
FinalDisposition(messageProperty);
|
||
|
return true;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void FinalDisposition(MsmqMessageProperty messageProperty)
|
||
|
{
|
||
|
switch (this.receiver.MsmqReceiveParameters.ReceiveErrorHandling)
|
||
|
{
|
||
|
case ReceiveErrorHandling.Drop:
|
||
|
this.receiver.DropOrRejectReceivedMessage(messageProperty, false);
|
||
|
break;
|
||
|
|
||
|
case ReceiveErrorHandling.Fault:
|
||
|
MsmqReceiveHelper.TryAbortTransactionCurrent();
|
||
|
if (null != this.receiver.ChannelListener)
|
||
|
this.receiver.ChannelListener.FaultListener();
|
||
|
if (null != this.receiver.Channel)
|
||
|
this.receiver.Channel.FaultChannel();
|
||
|
break;
|
||
|
case ReceiveErrorHandling.Reject:
|
||
|
this.receiver.DropOrRejectReceivedMessage(messageProperty, true);
|
||
|
MsmqDiagnostics.PoisonMessageRejected(messageProperty.MessageId, this.receiver.InstanceId);
|
||
|
break;
|
||
|
default:
|
||
|
Fx.Assert("System.ServiceModel.Channels.Msmq4PoisonHandler.FinalDisposition(): (unexpected ReceiveErrorHandling)");
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void Dispose()
|
||
|
{ }
|
||
|
}
|
||
|
}
|