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
- TemplateBindingExtension.cs
- SByteStorage.cs
- RegexBoyerMoore.cs
- WorkflowEnvironment.cs
- DataTableMappingCollection.cs
- GridViewPageEventArgs.cs
- ListControl.cs
- SingleStorage.cs
- recordstate.cs
- TextPatternIdentifiers.cs
- SoapEnumAttribute.cs
- ValueExpressions.cs
- assertwrapper.cs
- MenuItemCollection.cs
- TextSelectionHighlightLayer.cs
- XpsSerializerWriter.cs
- SqlParameterCollection.cs
- QilStrConcatenator.cs
- RewritingProcessor.cs
- DependencySource.cs
- FileDialog.cs
- VectorConverter.cs
- TagPrefixAttribute.cs
- XamlFrame.cs
- Number.cs
- x509store.cs
- VerificationAttribute.cs
- OutputCacheSettingsSection.cs
- XmlHierarchicalEnumerable.cs
- HttpRuntime.cs
- ImageAutomationPeer.cs
- WebServiceTypeData.cs
- SqlUserDefinedAggregateAttribute.cs
- DbCommandDefinition.cs
- SafeArrayRankMismatchException.cs
- ObjectItemNoOpAssemblyLoader.cs
- ProtectedProviderSettings.cs
- FlowDocumentReaderAutomationPeer.cs
- PointConverter.cs
- Int16Animation.cs
- XmlConverter.cs
- DataGridDefaultColumnWidthTypeConverter.cs
- ByteAnimationBase.cs
- WebPartCancelEventArgs.cs
- HybridObjectCache.cs
- DBParameter.cs
- SecurityDescriptor.cs
- TreeView.cs
- AddingNewEventArgs.cs
- DataServiceExpressionVisitor.cs
- OleDbConnectionInternal.cs
- SymbolType.cs
- LinkButton.cs
- PipeStream.cs
- SourceLineInfo.cs
- BezierSegment.cs
- X509ClientCertificateAuthentication.cs
- ConnectionStringsExpressionEditor.cs
- X509CertificateCollection.cs
- DateTimeOffset.cs
- Page.cs
- ResourceDefaultValueAttribute.cs
- SqlCommand.cs
- ReliableChannelListener.cs
- FunctionImportElement.cs
- Int64Animation.cs
- diagnosticsswitches.cs
- DelegatingTypeDescriptionProvider.cs
- SafeViewOfFileHandle.cs
- SimpleLine.cs
- GridSplitterAutomationPeer.cs
- DefaultWorkflowSchedulerService.cs
- OLEDB_Enum.cs
- ResourceType.cs
- MessagingDescriptionAttribute.cs
- prompt.cs
- RegexFCD.cs
- DataFieldConverter.cs
- RegularExpressionValidator.cs
- ActivityCollectionMarkupSerializer.cs
- HttpBrowserCapabilitiesBase.cs
- RestClientProxyHandler.cs
- XamlStyleSerializer.cs
- RangeValueProviderWrapper.cs
- ListenerAdapter.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- GridViewSortEventArgs.cs
- DbMetaDataColumnNames.cs
- TextEditor.cs
- UserControlParser.cs
- IpcServerChannel.cs
- SpotLight.cs
- ToolboxComponentsCreatingEventArgs.cs
- WindowsPen.cs
- RepeaterCommandEventArgs.cs
- DateTimeOffsetStorage.cs
- ListenerConstants.cs
- SiteMapPath.cs
- UndoManager.cs
- NumericPagerField.cs