Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities / System / Activities / Statements / CompensationExtension.cs / 1305376 / CompensationExtension.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Activities.Statements { using System; using System.Activities.Hosting; using System.Activities.Persistence; using System.Collections.Generic; using System.ComponentModel; using System.Runtime; using System.Xml.Linq; sealed class CompensationExtension : PersistenceParticipant, IWorkflowInstanceExtension { static readonly XNamespace compensationNamespace = XNamespace.Get("urn:schemas-microsoft-com:System.Activities/4.0/compensation"); static readonly XName compensationExtensionData = compensationNamespace.GetName("Data"); [Fx.Tag.SynchronizationObject(Blocking = false)] DictionarycompensationTokenTable; public CompensationExtension() { this.compensationTokenTable = new Dictionary (); } internal Dictionary CompensationTokenTable { get { return this.compensationTokenTable; } private set { this.compensationTokenTable = value; } } internal long Id { get; set; } internal Bookmark WorkflowCompensation { get; set; } internal Bookmark WorkflowConfirmation { get; set; } internal Bookmark WorkflowCompensationScheduled { get; private set; } internal bool IsWorkflowCompensationBehaviorScheduled { get; private set; } internal WorkflowCompensationBehavior WorkflowCompensationBehavior { get; set; } internal WorkflowInstanceProxy Instance { get; private set; } internal void Add(long compensationId, CompensationTokenData compensationToken) { Fx.Assert(compensationToken != null, "compensationToken must be valid"); this.CompensationTokenTable[compensationId] = compensationToken; } internal void Remove(long compensationId) { this.CompensationTokenTable.Remove(compensationId); } internal CompensationTokenData Get(long compensationId) { CompensationTokenData compensationToken = null; this.CompensationTokenTable.TryGetValue(compensationId, out compensationToken); return compensationToken; } internal Bookmark FindBookmark(long compensationId, CompensationBookmarkName bookmarkName) { CompensationTokenData compensationToken = null; Bookmark bookmark = null; if (this.CompensationTokenTable.TryGetValue(compensationId, out compensationToken)) { bookmark = compensationToken.BookmarkTable[bookmarkName]; } return bookmark; } internal void SetupWorkflowCompensationBehavior(NativeActivityContext context, BookmarkCallback callback) { this.WorkflowCompensationScheduled = context.CreateBookmark(callback); Fx.Assert(this.WorkflowCompensationBehavior != null, "WorkflowCompensationBehavior must be valid"); context.ScheduleSecondaryRoot(this.WorkflowCompensationBehavior, null); // Add the root compensationToken to track all root CA execution order. this.Add(CompensationToken.RootCompensationId, new CompensationTokenData(CompensationToken.RootCompensationId, CompensationToken.RootCompensationId)); this.IsWorkflowCompensationBehaviorScheduled = true; } public long GetNextId() { return ++this.Id; } public void NotifyMessage(NativeActivityContext context, long compensationId, CompensationBookmarkName compensationBookmark) { Bookmark bookmark = FindBookmark(compensationId, compensationBookmark); if (bookmark != null) { context.ResumeBookmark(bookmark, compensationId); } else { throw FxTrace.Exception.AsError(new InvalidOperationException(SR.BookmarkNotRegistered(compensationBookmark))); } } IEnumerable
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- InlineCategoriesDocument.cs
- LateBoundChannelParameterCollection.cs
- FlowDocumentPageViewerAutomationPeer.cs
- Confirm.cs
- ModuleConfigurationInfo.cs
- XmlUtil.cs
- WindowsStartMenu.cs
- ListViewItem.cs
- DefaultValueTypeConverter.cs
- GlyphShapingProperties.cs
- WebPartManagerInternals.cs
- XamlFigureLengthSerializer.cs
- SMSvcHost.cs
- ReadOnlyCollection.cs
- IndexOutOfRangeException.cs
- XmlnsCompatibleWithAttribute.cs
- TraceHandlerErrorFormatter.cs
- DataComponentMethodGenerator.cs
- InkCanvas.cs
- WmfPlaceableFileHeader.cs
- AdRotator.cs
- WorkflowMessageEventArgs.cs
- XamlWriter.cs
- EntityParameterCollection.cs
- AmbientProperties.cs
- DataShape.cs
- WindowsListViewGroup.cs
- ScalarType.cs
- ToolStripDesignerAvailabilityAttribute.cs
- XPathBinder.cs
- MeasureData.cs
- XhtmlCssHandler.cs
- GrammarBuilderBase.cs
- NameTable.cs
- ValidationResult.cs
- ProcessModelInfo.cs
- MatrixCamera.cs
- AppDomainUnloadedException.cs
- SafeMemoryMappedViewHandle.cs
- PointLight.cs
- UserControl.cs
- PngBitmapDecoder.cs
- PropertyToken.cs
- GridViewDeletedEventArgs.cs
- ImageDrawing.cs
- DataSetFieldSchema.cs
- CodeTypeDeclarationCollection.cs
- WindowsScrollBarBits.cs
- ViewRendering.cs
- EntityDataSourceView.cs
- CodeNamespaceImport.cs
- ClientConfigPaths.cs
- TransformGroup.cs
- FormViewUpdatedEventArgs.cs
- DefaultHttpHandler.cs
- AdapterUtil.cs
- ScriptComponentDescriptor.cs
- SHA384Managed.cs
- SqlMethodAttribute.cs
- Emitter.cs
- ConsumerConnectionPoint.cs
- GeneratedView.cs
- QuaternionKeyFrameCollection.cs
- XsltFunctions.cs
- ConnectionStringsExpressionBuilder.cs
- XslCompiledTransform.cs
- FontUnit.cs
- StrokeSerializer.cs
- DelegatingStream.cs
- LayeredChannelListener.cs
- SmtpClient.cs
- BindingNavigator.cs
- RightsManagementEncryptedStream.cs
- InheritanceAttribute.cs
- XpsFilter.cs
- EmptyCollection.cs
- HitTestDrawingContextWalker.cs
- CodePageUtils.cs
- BufferedWebEventProvider.cs
- DBDataPermission.cs
- DivideByZeroException.cs
- ClientOptions.cs
- TypeConverterValueSerializer.cs
- WebControlAdapter.cs
- NominalTypeEliminator.cs
- TraceEventCache.cs
- PauseStoryboard.cs
- BasicCellRelation.cs
- BinaryCommonClasses.cs
- InputBuffer.cs
- XmlDomTextWriter.cs
- TableCellsCollectionEditor.cs
- HandoffBehavior.cs
- ZoneLinkButton.cs
- NotifyCollectionChangedEventArgs.cs
- IssuanceLicense.cs
- webbrowsersite.cs
- StatusBarItem.cs
- XXXInfos.cs
- PassportAuthenticationModule.cs