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
- AutomationPropertyInfo.cs
- EtwTrackingBehavior.cs
- AvTraceDetails.cs
- WebServiceErrorEvent.cs
- Assembly.cs
- CqlParserHelpers.cs
- DataRecord.cs
- GlyphRunDrawing.cs
- ActivityPreviewDesigner.cs
- BinHexEncoding.cs
- EntityConnection.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- ConfigurationElementCollection.cs
- CustomAttribute.cs
- ExpressionDumper.cs
- BinaryCommonClasses.cs
- RequestDescription.cs
- NameTable.cs
- ListBindableAttribute.cs
- StreamGeometryContext.cs
- BufferAllocator.cs
- ObjectSpanRewriter.cs
- CheckBox.cs
- SqlErrorCollection.cs
- DetailsViewUpdateEventArgs.cs
- FastPropertyAccessor.cs
- HtmlTableCellCollection.cs
- AssemblyName.cs
- MailWebEventProvider.cs
- StaticResourceExtension.cs
- BinaryObjectInfo.cs
- InstanceKeyCollisionException.cs
- ForceCopyBuildProvider.cs
- Collection.cs
- PrintPreviewGraphics.cs
- ParameterExpression.cs
- UrlMapping.cs
- WindowsListView.cs
- DataFieldEditor.cs
- ExpandoClass.cs
- DefaultValueConverter.cs
- XslTransform.cs
- FontSizeConverter.cs
- TreeNode.cs
- TemplateControlParser.cs
- AliasGenerator.cs
- ReliableChannelBinder.cs
- CapabilitiesState.cs
- ApplicationException.cs
- CodeTypeReference.cs
- DataBoundControlAdapter.cs
- QilVisitor.cs
- DateTimeFormat.cs
- CodeVariableReferenceExpression.cs
- ResourceType.cs
- UnescapedXmlDiagnosticData.cs
- HtmlWindowCollection.cs
- ClientEventManager.cs
- StrongNameMembershipCondition.cs
- CompositeActivityValidator.cs
- ChannelFactoryRefCache.cs
- CodeChecksumPragma.cs
- FrameworkContentElementAutomationPeer.cs
- ContextMenuAutomationPeer.cs
- Effect.cs
- TreeIterator.cs
- DoubleLinkList.cs
- RecognizerInfo.cs
- EFColumnProvider.cs
- SharedMemory.cs
- VirtualPathUtility.cs
- QueueProcessor.cs
- XmlConvert.cs
- MasterPageBuildProvider.cs
- ProcessStartInfo.cs
- URI.cs
- DbConnectionStringBuilder.cs
- FormsAuthenticationTicket.cs
- UnsafeNativeMethods.cs
- BuilderPropertyEntry.cs
- BrowserCapabilitiesFactoryBase.cs
- BinaryWriter.cs
- SymLanguageType.cs
- HyperlinkAutomationPeer.cs
- UIElementParagraph.cs
- SafeNativeMethods.cs
- Dispatcher.cs
- PtsContext.cs
- FontStretch.cs
- XmlAnyAttributeAttribute.cs
- ParallelTimeline.cs
- DynamicILGenerator.cs
- Separator.cs
- TextParaLineResult.cs
- HttpStreams.cs
- Wrapper.cs
- ModuleBuilder.cs
- ClosureBinding.cs
- Literal.cs
- Membership.cs