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
- Predicate.cs
- ThreadSafeList.cs
- TableCell.cs
- Rect3D.cs
- TrustLevelCollection.cs
- DependencyObject.cs
- DataGridViewTextBoxColumn.cs
- SiteOfOriginPart.cs
- XmlSchemaSimpleContent.cs
- WsiProfilesElementCollection.cs
- ClickablePoint.cs
- DSASignatureFormatter.cs
- StringValidator.cs
- X509CertificateTrustedIssuerElement.cs
- OrderedDictionary.cs
- ItemCheckedEvent.cs
- PropertyValidationContext.cs
- CompositionTarget.cs
- ByeMessage11.cs
- TextEditorSelection.cs
- PickBranch.cs
- TransformBlockRequest.cs
- AmbientEnvironment.cs
- StateMachineSubscription.cs
- FileDialog_Vista.cs
- Subtree.cs
- ProtocolsConfigurationHandler.cs
- PropertyDescriptorCollection.cs
- TemplateBindingExtension.cs
- HtmlTable.cs
- TextDecorationCollectionConverter.cs
- Font.cs
- EdmTypeAttribute.cs
- ArrangedElement.cs
- SqlSupersetValidator.cs
- XhtmlBasicControlAdapter.cs
- CodeSubDirectoriesCollection.cs
- DataSourceDescriptorCollection.cs
- TextChange.cs
- ClientRolePrincipal.cs
- BufferedResponseStream.cs
- ProcessThread.cs
- PrintPageEvent.cs
- TextElement.cs
- UInt64Converter.cs
- MatchingStyle.cs
- XmlElementElementCollection.cs
- DbConvert.cs
- BindingExpressionBase.cs
- KeyPullup.cs
- OleDbRowUpdatedEvent.cs
- DBSchemaTable.cs
- XmlSerializableServices.cs
- SiteIdentityPermission.cs
- BitmapImage.cs
- QueryCacheKey.cs
- QueryCacheKey.cs
- NavigationExpr.cs
- HostProtectionPermission.cs
- DataTrigger.cs
- PolyLineSegment.cs
- X509WindowsSecurityToken.cs
- WindowsFormsEditorServiceHelper.cs
- SQLDateTimeStorage.cs
- PersistenceProviderFactory.cs
- ListControl.cs
- DrawListViewColumnHeaderEventArgs.cs
- ModifierKeysValueSerializer.cs
- ByteStream.cs
- SqlDataSourceWizardForm.cs
- PipelineModuleStepContainer.cs
- ChildTable.cs
- DataObject.cs
- CompoundFileReference.cs
- XmlUtf8RawTextWriter.cs
- MembershipUser.cs
- DES.cs
- DigestTraceRecordHelper.cs
- AssociationSet.cs
- XmlCharCheckingReader.cs
- EmbeddedMailObjectsCollection.cs
- EdmComplexTypeAttribute.cs
- WrapperSecurityCommunicationObject.cs
- AtomMaterializerLog.cs
- RootBrowserWindow.cs
- SequentialOutput.cs
- Bookmark.cs
- CodeGenerator.cs
- ZipIOExtraFieldZip64Element.cs
- ReliableInputConnection.cs
- AutoGeneratedField.cs
- PageCodeDomTreeGenerator.cs
- RepeaterItemEventArgs.cs
- UnsafeNativeMethods.cs
- ExceptionCollection.cs
- Point.cs
- XmlSchemaIdentityConstraint.cs
- RoutedEventArgs.cs
- HttpProfileGroupBase.cs
- SelectionProviderWrapper.cs