Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Activities / LocalService / CorrelationTokenInvalidatedHandler.cs / 1305376 / CorrelationTokenInvalidatedHandler.cs
using System; using System.Diagnostics; using System.Collections.Generic; using System.Collections; using System.Reflection; using System.Runtime.Serialization; using System.Workflow.ComponentModel; using System.Workflow.Runtime; using System.Workflow.Runtime.Hosting; namespace System.Workflow.Activities { [Serializable] internal sealed class CorrelationTokenInvalidatedHandler : IActivityEventListener{ IActivityEventListener eventHandler; EventQueueName queueName; Guid subscriptionId; Guid instanceId; bool queueCreator; Type interfaceType; string followerOperation; internal CorrelationTokenInvalidatedHandler(Type interfaceType, string operation, IActivityEventListener eventHandler, Guid instanceId) { this.eventHandler = eventHandler; this.interfaceType = interfaceType; this.followerOperation = operation; this.instanceId = instanceId; } #region IActivityEventListener Members void IActivityEventListener .OnEvent(object sender, CorrelationTokenEventArgs dataChangeEventArgs) { if (sender == null) throw new ArgumentException("sender"); if (dataChangeEventArgs == null) throw new ArgumentException("dataChangeEventArgs"); ActivityExecutionContext context = sender as ActivityExecutionContext; Activity activity = context.Activity; ICollection correlationValues = dataChangeEventArgs.CorrelationToken.Properties; if (dataChangeEventArgs.IsInitializing) { CreateSubscription(this.instanceId, context, correlationValues); return; } if (queueName != null) { if (!CorrelationResolver.IsInitializingMember(queueName.InterfaceType, queueName.MethodName, correlationValues == null ? null : new object[] { correlationValues })) { DeleteSubscription(context); } } dataChangeEventArgs.CorrelationToken.UnsubscribeFromCorrelationTokenInitializedEvent(activity, this); } #endregion private void CreateSubscription(Guid instanceId, ActivityExecutionContext context, ICollection correlationValues) { WorkflowQueuingService queueSvcs = context.GetService (); EventQueueName queueId = new EventQueueName(this.interfaceType, this.followerOperation, correlationValues); WorkflowQueue workflowQueue = null; if (!queueSvcs.Exists(queueId)) { WorkflowActivityTrace.Activity.TraceEvent(TraceEventType.Information, 0, "CorrelationTokenInvalidatedHandler: creating q {0} ", queueId.GetHashCode()); workflowQueue = queueSvcs.CreateWorkflowQueue(queueId, true); queueCreator = true; } else { workflowQueue = queueSvcs.GetWorkflowQueue(queueId); } if (this.eventHandler != null) { workflowQueue.RegisterForQueueItemAvailable(this.eventHandler); } WorkflowSubscriptionService subscriptionService = (WorkflowSubscriptionService)context.GetService(typeof(WorkflowSubscriptionService)); MessageEventSubscription subscription = new MessageEventSubscription(queueId, instanceId); this.queueName = queueId; this.subscriptionId = subscription.SubscriptionId; subscription.InterfaceType = this.interfaceType; subscription.MethodName = this.followerOperation; this.interfaceType = null; this.followerOperation = null; if (correlationValues != null) { foreach (CorrelationProperty property in correlationValues) { subscription.CorrelationProperties.Add(property); } } if (this.eventHandler != null) return; if (subscriptionService == null) return; subscriptionService.CreateSubscription(subscription); } private void DeleteSubscription(ActivityExecutionContext context) { if (this.queueName == null) return; WorkflowQueuingService queueSvcs = context.GetService (); if (queueCreator) queueSvcs.DeleteWorkflowQueue(this.queueName); if (this.eventHandler != null) return; WorkflowSubscriptionService subscriptionService = context.GetService (); if (subscriptionService != null) subscriptionService.DeleteSubscription(this.subscriptionId); WorkflowActivityTrace.Activity.TraceEvent(TraceEventType.Information, 0, "CorrelationTokenInvalidatedHandler subscription deleted SubId {0} QueueId {1}", this.subscriptionId, this.queueName); } } } // 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
- XamlReaderHelper.cs
- SpecialFolderEnumConverter.cs
- BadImageFormatException.cs
- JoinSymbol.cs
- DbBuffer.cs
- EntityDataSourceWrapper.cs
- CheckableControlBaseAdapter.cs
- CommandEventArgs.cs
- TargetParameterCountException.cs
- HandledEventArgs.cs
- GridItemProviderWrapper.cs
- StringValidatorAttribute.cs
- XmlNodeWriter.cs
- PolyBezierSegmentFigureLogic.cs
- EncryptedType.cs
- WizardForm.cs
- Version.cs
- ExpressionLink.cs
- TypefaceMetricsCache.cs
- HiddenFieldPageStatePersister.cs
- FontEditor.cs
- DataGridViewLayoutData.cs
- CodeObjectCreateExpression.cs
- DispatcherHooks.cs
- WebScriptEnablingBehavior.cs
- DropTarget.cs
- ProfileInfo.cs
- BamlLocalizationDictionary.cs
- Base64Stream.cs
- Italic.cs
- CompilationUtil.cs
- DbCommandTree.cs
- XmlSchemaChoice.cs
- XmlCharCheckingReader.cs
- CodeTypeMember.cs
- MsmqQueue.cs
- VarInfo.cs
- AppDomainResourcePerfCounters.cs
- XmlObjectSerializerReadContextComplexJson.cs
- CriticalFinalizerObject.cs
- PathFigureCollectionValueSerializer.cs
- UnsafeNativeMethods.cs
- StorageEntityTypeMapping.cs
- DropTarget.cs
- LinqExpressionNormalizer.cs
- WinFormsComponentEditor.cs
- CodeTypeReferenceExpression.cs
- RtfControlWordInfo.cs
- RightsManagementEncryptionTransform.cs
- AgileSafeNativeMemoryHandle.cs
- TrustManagerPromptUI.cs
- CodeDefaultValueExpression.cs
- FrameSecurityDescriptor.cs
- Mutex.cs
- SendReply.cs
- StrongName.cs
- ContentOperations.cs
- DeviceContext2.cs
- SessionEndingCancelEventArgs.cs
- HttpModuleAction.cs
- KnowledgeBase.cs
- TypeExtensionConverter.cs
- StringHandle.cs
- VariableQuery.cs
- NoResizeSelectionBorderGlyph.cs
- RoleManagerSection.cs
- FileLogRecordHeader.cs
- PathGradientBrush.cs
- Normalization.cs
- WindowPattern.cs
- BoolExpressionVisitors.cs
- UpdateRecord.cs
- SignatureSummaryDialog.cs
- OuterGlowBitmapEffect.cs
- InvalidDataException.cs
- ToolboxItemCollection.cs
- SpellerInterop.cs
- XmlLoader.cs
- DataGridPageChangedEventArgs.cs
- MemberExpression.cs
- RegexWriter.cs
- Util.cs
- XsdBuilder.cs
- XmlSerializer.cs
- CodeMemberProperty.cs
- newitemfactory.cs
- TextInfo.cs
- Wildcard.cs
- EntityPropertyMappingAttribute.cs
- ProtectedProviderSettings.cs
- _Win32.cs
- _SpnDictionary.cs
- ExecutedRoutedEventArgs.cs
- MsmqUri.cs
- DesignBindingEditor.cs
- RadioButtonStandardAdapter.cs
- OptimalTextSource.cs
- VirtualizingStackPanel.cs
- BamlRecordWriter.cs
- AnimatedTypeHelpers.cs