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
- RemoteWebConfigurationHost.cs
- PowerEase.cs
- ActivationServices.cs
- NativeMethodsCLR.cs
- JoinCqlBlock.cs
- ListViewCancelEventArgs.cs
- CodeConditionStatement.cs
- DurableInstanceProvider.cs
- ContentDisposition.cs
- BindingObserver.cs
- FixedSOMFixedBlock.cs
- PathFigureCollectionConverter.cs
- VisualBasicSettings.cs
- HttpListenerContext.cs
- precedingquery.cs
- SystemColorTracker.cs
- MetadataPropertyCollection.cs
- ImageList.cs
- DataGridViewRowHeightInfoPushedEventArgs.cs
- PageRequestManager.cs
- Roles.cs
- Operator.cs
- Stack.cs
- GPStream.cs
- InstalledFontCollection.cs
- UrlParameterReader.cs
- FontWeight.cs
- PropertyChangedEventManager.cs
- StaticSiteMapProvider.cs
- TextSchema.cs
- Primitive.cs
- BindingNavigator.cs
- FixUpCollection.cs
- ObjectDataSourceSelectingEventArgs.cs
- HelloMessageApril2005.cs
- WindowHideOrCloseTracker.cs
- RelationshipNavigation.cs
- TableLayoutPanel.cs
- RightsManagementPermission.cs
- StaticDataManager.cs
- SqlNodeAnnotations.cs
- XmlWellformedWriter.cs
- NullableDecimalAverageAggregationOperator.cs
- JournalEntry.cs
- DelegateSerializationHolder.cs
- ProgressBarBrushConverter.cs
- unsafenativemethodstextservices.cs
- ScriptManagerProxy.cs
- BuiltInPermissionSets.cs
- PointCollectionValueSerializer.cs
- ViewBox.cs
- MailHeaderInfo.cs
- DragEvent.cs
- TreeNodeBinding.cs
- EntityEntry.cs
- InvokeMethod.cs
- XsltConvert.cs
- DataGridViewComboBoxCell.cs
- EncoderParameter.cs
- WindowsAuthenticationModule.cs
- MatrixStack.cs
- ToolStripDropDownDesigner.cs
- RSAOAEPKeyExchangeDeformatter.cs
- TypeForwardedToAttribute.cs
- SqlDataSourceConfigureSelectPanel.cs
- CodeExpressionStatement.cs
- DelegatingConfigHost.cs
- FastPropertyAccessor.cs
- Parallel.cs
- GradientBrush.cs
- StringFreezingAttribute.cs
- SettingsPropertyCollection.cs
- BinaryWriter.cs
- ManipulationStartedEventArgs.cs
- ExpressionWriter.cs
- XmlSchemaAnnotation.cs
- LoadedOrUnloadedOperation.cs
- Fonts.cs
- EventRecord.cs
- KeyedHashAlgorithm.cs
- DataServiceRequestArgs.cs
- ObjectItemAssemblyLoader.cs
- InstanceStore.cs
- RowToFieldTransformer.cs
- X509CertificateStore.cs
- AppLevelCompilationSectionCache.cs
- BatchParser.cs
- ActivationServices.cs
- StylusPointCollection.cs
- SelfIssuedTokenFactoryCredential.cs
- CodeMemberProperty.cs
- BCryptNative.cs
- MemberDomainMap.cs
- IPipelineRuntime.cs
- BitmapEffectCollection.cs
- WindowsFormsHost.cs
- SQLDecimalStorage.cs
- WebPartManager.cs
- IconEditor.cs
- WindowsTokenRoleProvider.cs