Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / Msmq3PoisonHandler.cs / 1 / Msmq3PoisonHandler.cs
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------
namespace System.ServiceModel.Channels
{
using System.Collections.Generic;
sealed class Msmq3PoisonHandler: IPoisonHandlingStrategy
{
const int maxTrackedMessages = 256;
MsmqReceiveHelper receiver;
SortedList trackedMessages;
object thisLock = new object();
internal Msmq3PoisonHandler(MsmqReceiveHelper receiver)
{
this.receiver = receiver;
this.trackedMessages = new SortedList(maxTrackedMessages);
}
public bool CheckAndHandlePoisonMessage(MsmqMessageProperty messageProperty)
{
long lookupId = messageProperty.LookupId;
int seen;
lock (thisLock)
{
seen = this.UpdateSeenCount(lookupId);
if (seen > (receiver.MsmqReceiveParameters.ReceiveRetryCount + 1) && receiver.MsmqReceiveParameters.ReceiveRetryCount != Int32.MaxValue)
{
FinalDisposition(messageProperty);
this.trackedMessages.Remove(lookupId);
return true;
}
}
messageProperty.AbortCount = seen - 1;
return false;
}
public void FinalDisposition(MsmqMessageProperty messageProperty)
{
switch (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;
default:
DiagnosticUtility.DebugAssert("System.ServiceModel.Channels.Msmq3PoisonHandler.FinalDisposition(): (unexpected ReceiveErrorHandling)");
break;
}
}
int UpdateSeenCount(long lookupId)
{
int value;
if (this.trackedMessages.TryGetValue(lookupId, out value))
{
++ value;
this.trackedMessages[lookupId] = value;
return value;
}
else
{
if (maxTrackedMessages == this.trackedMessages.Count)
{
this.trackedMessages.RemoveAt(0);
}
this.trackedMessages.Add(lookupId, 1);
return 1;
}
}
public void Open()
{}
public void Dispose()
{}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- FrameAutomationPeer.cs
- ObjectSpanRewriter.cs
- ElementHostPropertyMap.cs
- DesignerDataColumn.cs
- PropertyNames.cs
- Menu.cs
- WindowsPen.cs
- Content.cs
- GeneratedCodeAttribute.cs
- CodeTypeReferenceCollection.cs
- RegexRunnerFactory.cs
- AnnouncementClient.cs
- DataSvcMapFile.cs
- ResourceDisplayNameAttribute.cs
- ArglessEventHandlerProxy.cs
- CipherData.cs
- InfoCardProofToken.cs
- EventMappingSettings.cs
- ControlAdapter.cs
- FieldNameLookup.cs
- ListViewEditEventArgs.cs
- FactoryGenerator.cs
- MailMessage.cs
- ObjectDataSource.cs
- CqlQuery.cs
- FontDialog.cs
- OutputCacheProfileCollection.cs
- RC2CryptoServiceProvider.cs
- StorageMappingItemCollection.cs
- UrlPath.cs
- ArrayElementGridEntry.cs
- xamlnodes.cs
- CryptoProvider.cs
- CompiledQuery.cs
- ProcessRequestArgs.cs
- ScrollBarAutomationPeer.cs
- XmlSchemaSimpleType.cs
- SqlXmlStorage.cs
- StrokeIntersection.cs
- DuplicateDetector.cs
- ServicesUtilities.cs
- StrokeCollectionDefaultValueFactory.cs
- DocumentPageViewAutomationPeer.cs
- ArrayElementGridEntry.cs
- ObjectDisposedException.cs
- LicenseException.cs
- StringCollectionEditor.cs
- TaiwanLunisolarCalendar.cs
- Events.cs
- ViewBase.cs
- ToolStripDropDownButton.cs
- FormViewInsertEventArgs.cs
- FixedSOMGroup.cs
- TokenBasedSetEnumerator.cs
- FontWeightConverter.cs
- DomNameTable.cs
- IPAddress.cs
- Vector3DCollectionValueSerializer.cs
- TransformedBitmap.cs
- NamedPermissionSet.cs
- EntityDataSourceWizardForm.cs
- SerializationException.cs
- DefaultPropertyAttribute.cs
- RadioButtonList.cs
- CompressStream.cs
- ClaimTypes.cs
- TypeDependencyAttribute.cs
- GlobalizationSection.cs
- ParagraphResult.cs
- ParameterCollection.cs
- Debug.cs
- DBConcurrencyException.cs
- DropDownList.cs
- WindowsIPAddress.cs
- HttpHandlerActionCollection.cs
- DataSvcMapFile.cs
- AssemblyAssociatedContentFileAttribute.cs
- SQLRoleProvider.cs
- StringConcat.cs
- ListViewHitTestInfo.cs
- ReferencedType.cs
- Tile.cs
- ExtensionWindowResizeGrip.cs
- DefaultValueTypeConverter.cs
- AuthenticationConfig.cs
- LayoutUtils.cs
- WebBrowserDocumentCompletedEventHandler.cs
- UnsafeNativeMethods.cs
- XmlSchemaNotation.cs
- ColumnResizeAdorner.cs
- ThrowHelper.cs
- ExtensionSimplifierMarkupObject.cs
- MethodRental.cs
- FileAuthorizationModule.cs
- ConfigXmlElement.cs
- PageOrientation.cs
- ModelTreeEnumerator.cs
- SqlTriggerContext.cs
- CopyCodeAction.cs
- XmlNamedNodeMap.cs