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
- ObjectListItem.cs
- Metadata.cs
- WebPageTraceListener.cs
- FormViewUpdatedEventArgs.cs
- EntityDataSourceView.cs
- CompiledIdentityConstraint.cs
- VisualStates.cs
- ByteStack.cs
- MobileContainerDesigner.cs
- ConnectionStringSettingsCollection.cs
- TransformerInfoCollection.cs
- EntityTypeBase.cs
- ContentFileHelper.cs
- TextWriter.cs
- AttachmentService.cs
- OleDbException.cs
- SafeNativeMethods.cs
- Queue.cs
- IpcClientChannel.cs
- SchemaAttDef.cs
- InternalConfigSettingsFactory.cs
- Zone.cs
- ContainerUIElement3D.cs
- ObservableDictionary.cs
- DataPointer.cs
- BamlRecordReader.cs
- XdrBuilder.cs
- BaseTemplateBuildProvider.cs
- CriticalFinalizerObject.cs
- shaperfactoryquerycacheentry.cs
- ReverseInheritProperty.cs
- Material.cs
- DecodeHelper.cs
- ParallelDesigner.cs
- DefaultConfirmation.cs
- ThicknessAnimationBase.cs
- _SecureChannel.cs
- EnumUnknown.cs
- HwndSubclass.cs
- RealizationContext.cs
- SecurityTokenParameters.cs
- BlockUIContainer.cs
- ObjectStateEntryBaseUpdatableDataRecord.cs
- MultiAsyncResult.cs
- KeyedCollection.cs
- WindowsBrush.cs
- TextTreeExtractElementUndoUnit.cs
- GiveFeedbackEventArgs.cs
- PerformanceCounterLib.cs
- SecurityRuntime.cs
- WebBrowserBase.cs
- ArrayList.cs
- FunctionImportElement.cs
- WindowsSysHeader.cs
- SecurityMode.cs
- XmlSchemaSimpleTypeList.cs
- ActivationArguments.cs
- PartialCachingControl.cs
- CombinedTcpChannel.cs
- XsltQilFactory.cs
- RewritingProcessor.cs
- ToolTipAutomationPeer.cs
- __FastResourceComparer.cs
- TypedTableGenerator.cs
- StorageModelBuildProvider.cs
- CheckedListBox.cs
- DataGridLinkButton.cs
- ScaleTransform3D.cs
- FileDialog.cs
- XmlCollation.cs
- Util.cs
- EdmFunction.cs
- CurrentChangingEventManager.cs
- SqlMethodAttribute.cs
- SqlParameterCollection.cs
- StringUtil.cs
- ActivityXRefPropertyEditor.cs
- RepeatInfo.cs
- XPathArrayIterator.cs
- TabControl.cs
- DataGridPagerStyle.cs
- BaseDataBoundControl.cs
- CheckPair.cs
- DynamicDataRouteHandler.cs
- VirtualDirectoryMappingCollection.cs
- DecoderReplacementFallback.cs
- AmbientProperties.cs
- ButtonFlatAdapter.cs
- ServiceInfo.cs
- CodePropertyReferenceExpression.cs
- DataGridPagerStyle.cs
- Schema.cs
- ExtensibleClassFactory.cs
- MeshGeometry3D.cs
- WSFederationHttpSecurity.cs
- ParentUndoUnit.cs
- XmlSchemaSimpleTypeUnion.cs
- WindowsSecurityToken.cs
- DataBindingCollection.cs
- RegexRunner.cs