Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Activities / LocalService / WorkflowMessageEventHandler.cs / 1305376 / WorkflowMessageEventHandler.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- using System; using System.Diagnostics; using System.Collections; using System.Collections.Generic; using System.Reflection; using System.Workflow.ComponentModel; using System.Workflow.Runtime; using System.Workflow.Runtime.Hosting; using System.Security.Principal; using System.Runtime.Serialization; namespace System.Workflow.Activities { [Serializable] public sealed class EventDeliveryFailedException : SystemException { public EventDeliveryFailedException() { } public EventDeliveryFailedException(String message) : base(message) { } public EventDeliveryFailedException(String message, Exception innerException) : base(message, innerException) { } private EventDeliveryFailedException(SerializationInfo info, StreamingContext context) : base(info, context) { } } [Serializable] internal sealed class WorkflowMessageEventHandler { Type proxiedType; string eventName; [NonSerialized] Type eventHandlerType; [NonSerialized] IDeliverMessage enqueueWrapper; internal WorkflowMessageEventHandler(Type proxiedType, EventInfo eventInfo, IDeliverMessage enqueueWrapper) { this.proxiedType = proxiedType; this.eventName = eventInfo.Name; this.eventHandlerType = eventInfo.EventHandlerType; this.enqueueWrapper = enqueueWrapper; } internal IDeliverMessage EnqueueWrapper { get { return this.enqueueWrapper; } set { if (value == null) { throw new ArgumentNullException("value"); } this.enqueueWrapper = value; } } internal Delegate Delegate { get { MethodInfo interceptedHandler = this.eventHandlerType.GetMethod("Invoke"); ParameterInfo[] parameters = interceptedHandler.GetParameters(); bool isValidParameter = false; if (parameters.Length == 2) { if (parameters[1].ParameterType.IsSubclassOf(typeof(ExternalDataEventArgs)) || parameters[1].ParameterType == (typeof(ExternalDataEventArgs))) isValidParameter = true; } if (isValidParameter) { MethodInfo mHandler = typeof(WorkflowMessageEventHandler).GetMethod("EventHandler"); return (Delegate)Activator.CreateInstance(eventHandlerType, new object[] { this, mHandler.MethodHandle.GetFunctionPointer() }); } return null; } } public void EventHandler(object sender, ExternalDataEventArgs eventArgs) { if (eventArgs == null) { throw new ArgumentNullException("eventArgs"); } try { object workItem; IPendingWork workHandler; object[] args = this.enqueueWrapper.PrepareEventArgsArray(sender, eventArgs, out workItem, out workHandler); EventQueueName key = GetKey(args); String securityIdentifier = null; if (eventArgs.Identity == null) { IIdentity identity = System.Threading.Thread.CurrentPrincipal.Identity; WindowsIdentity windowsIdentity = identity as WindowsIdentity; if (windowsIdentity != null && windowsIdentity.User != null) securityIdentifier = windowsIdentity.User.Translate(typeof(NTAccount)).ToString(); else if (identity != null) securityIdentifier = identity.Name; eventArgs.Identity = securityIdentifier; } else { securityIdentifier = eventArgs.Identity; } MethodMessage message = new MethodMessage(this.proxiedType, this.eventName, args, securityIdentifier); WorkflowActivityTrace.Activity.TraceEvent(TraceEventType.Information, 0, "Firing event {0} for instance {1}", this.eventName, eventArgs.InstanceId); this.enqueueWrapper.DeliverMessage(eventArgs, key, message, workItem, workHandler); } catch (Exception e) { if (ExternalDataExchangeService.IsIrrecoverableException(e)) { throw; } else { throw new EventDeliveryFailedException(SR.GetString(SR.Error_EventDeliveryFailedException, this.proxiedType, this.eventName, eventArgs.InstanceId), e); } } } private EventQueueName GetKey(object[] eventArgs) { bool provideInitializerTokens = CorrelationResolver.IsInitializingMember(this.proxiedType, this.eventName, eventArgs); ICollectionpredicates = CorrelationResolver.ResolveCorrelationValues(this.proxiedType, this.eventName, eventArgs, provideInitializerTokens); return new EventQueueName(this.proxiedType, this.eventName, predicates); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- using System; using System.Diagnostics; using System.Collections; using System.Collections.Generic; using System.Reflection; using System.Workflow.ComponentModel; using System.Workflow.Runtime; using System.Workflow.Runtime.Hosting; using System.Security.Principal; using System.Runtime.Serialization; namespace System.Workflow.Activities { [Serializable] public sealed class EventDeliveryFailedException : SystemException { public EventDeliveryFailedException() { } public EventDeliveryFailedException(String message) : base(message) { } public EventDeliveryFailedException(String message, Exception innerException) : base(message, innerException) { } private EventDeliveryFailedException(SerializationInfo info, StreamingContext context) : base(info, context) { } } [Serializable] internal sealed class WorkflowMessageEventHandler { Type proxiedType; string eventName; [NonSerialized] Type eventHandlerType; [NonSerialized] IDeliverMessage enqueueWrapper; internal WorkflowMessageEventHandler(Type proxiedType, EventInfo eventInfo, IDeliverMessage enqueueWrapper) { this.proxiedType = proxiedType; this.eventName = eventInfo.Name; this.eventHandlerType = eventInfo.EventHandlerType; this.enqueueWrapper = enqueueWrapper; } internal IDeliverMessage EnqueueWrapper { get { return this.enqueueWrapper; } set { if (value == null) { throw new ArgumentNullException("value"); } this.enqueueWrapper = value; } } internal Delegate Delegate { get { MethodInfo interceptedHandler = this.eventHandlerType.GetMethod("Invoke"); ParameterInfo[] parameters = interceptedHandler.GetParameters(); bool isValidParameter = false; if (parameters.Length == 2) { if (parameters[1].ParameterType.IsSubclassOf(typeof(ExternalDataEventArgs)) || parameters[1].ParameterType == (typeof(ExternalDataEventArgs))) isValidParameter = true; } if (isValidParameter) { MethodInfo mHandler = typeof(WorkflowMessageEventHandler).GetMethod("EventHandler"); return (Delegate)Activator.CreateInstance(eventHandlerType, new object[] { this, mHandler.MethodHandle.GetFunctionPointer() }); } return null; } } public void EventHandler(object sender, ExternalDataEventArgs eventArgs) { if (eventArgs == null) { throw new ArgumentNullException("eventArgs"); } try { object workItem; IPendingWork workHandler; object[] args = this.enqueueWrapper.PrepareEventArgsArray(sender, eventArgs, out workItem, out workHandler); EventQueueName key = GetKey(args); String securityIdentifier = null; if (eventArgs.Identity == null) { IIdentity identity = System.Threading.Thread.CurrentPrincipal.Identity; WindowsIdentity windowsIdentity = identity as WindowsIdentity; if (windowsIdentity != null && windowsIdentity.User != null) securityIdentifier = windowsIdentity.User.Translate(typeof(NTAccount)).ToString(); else if (identity != null) securityIdentifier = identity.Name; eventArgs.Identity = securityIdentifier; } else { securityIdentifier = eventArgs.Identity; } MethodMessage message = new MethodMessage(this.proxiedType, this.eventName, args, securityIdentifier); WorkflowActivityTrace.Activity.TraceEvent(TraceEventType.Information, 0, "Firing event {0} for instance {1}", this.eventName, eventArgs.InstanceId); this.enqueueWrapper.DeliverMessage(eventArgs, key, message, workItem, workHandler); } catch (Exception e) { if (ExternalDataExchangeService.IsIrrecoverableException(e)) { throw; } else { throw new EventDeliveryFailedException(SR.GetString(SR.Error_EventDeliveryFailedException, this.proxiedType, this.eventName, eventArgs.InstanceId), e); } } } private EventQueueName GetKey(object[] eventArgs) { bool provideInitializerTokens = CorrelationResolver.IsInitializingMember(this.proxiedType, this.eventName, eventArgs); ICollection predicates = CorrelationResolver.ResolveCorrelationValues(this.proxiedType, this.eventName, eventArgs, provideInitializerTokens); return new EventQueueName(this.proxiedType, this.eventName, predicates); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TextViewSelectionProcessor.cs
- CompileXomlTask.cs
- CreatingCookieEventArgs.cs
- MappingException.cs
- ConfigurationManagerHelperFactory.cs
- DataGridrowEditEndingEventArgs.cs
- ReflectPropertyDescriptor.cs
- ActiveXHelper.cs
- DbException.cs
- Membership.cs
- MenuTracker.cs
- StrokeNodeEnumerator.cs
- DiagnosticTrace.cs
- CompilerGlobalScopeAttribute.cs
- IOThreadTimer.cs
- DockProviderWrapper.cs
- ScrollViewerAutomationPeer.cs
- DiffuseMaterial.cs
- SyntaxCheck.cs
- AppDomainResourcePerfCounters.cs
- CommandBinding.cs
- MenuAdapter.cs
- Compilation.cs
- XmlDownloadManager.cs
- __TransparentProxy.cs
- PropertyValueUIItem.cs
- MbpInfo.cs
- NavigateEvent.cs
- SystemGatewayIPAddressInformation.cs
- DesignBindingPropertyDescriptor.cs
- Function.cs
- EntityCollection.cs
- ComponentRenameEvent.cs
- SqlFileStream.cs
- Composition.cs
- PrePostDescendentsWalker.cs
- DataViewListener.cs
- FtpWebResponse.cs
- GroupByExpressionRewriter.cs
- FlowDocumentPageViewerAutomationPeer.cs
- SecurityDescriptor.cs
- X509RawDataKeyIdentifierClause.cs
- ProtocolsConfigurationEntry.cs
- HttpClientCertificate.cs
- HtmlContainerControl.cs
- ScrollContentPresenter.cs
- _StreamFramer.cs
- RemoteArgument.cs
- MeasureData.cs
- GuidTagList.cs
- FixedPage.cs
- ButtonBaseAutomationPeer.cs
- PeerResolverBindingElement.cs
- PeerInvitationResponse.cs
- BinaryObjectReader.cs
- CompilerGlobalScopeAttribute.cs
- CustomWebEventKey.cs
- documentation.cs
- ApplicationDirectory.cs
- TypeExtensionConverter.cs
- DelimitedListTraceListener.cs
- ApplicationFileCodeDomTreeGenerator.cs
- MethodBuilder.cs
- CustomPopupPlacement.cs
- DrawingBrush.cs
- SqlNode.cs
- SystemGatewayIPAddressInformation.cs
- GeometryHitTestParameters.cs
- ActivityTrace.cs
- XmlName.cs
- NameValueConfigurationElement.cs
- SQLCharsStorage.cs
- Evidence.cs
- BitVector32.cs
- Label.cs
- SelectedGridItemChangedEvent.cs
- COM2FontConverter.cs
- Int32Storage.cs
- MeasureItemEvent.cs
- MasterPageCodeDomTreeGenerator.cs
- EntityDataSourceConfigureObjectContext.cs
- ObjectDataSourceMethodEditor.cs
- QueryOperatorEnumerator.cs
- ResourcePermissionBaseEntry.cs
- ExpressionEditor.cs
- CleanUpVirtualizedItemEventArgs.cs
- SpoolingTaskBase.cs
- ClientSponsor.cs
- Errors.cs
- AppDomainUnloadedException.cs
- DialogResultConverter.cs
- PlatformNotSupportedException.cs
- X509ServiceCertificateAuthenticationElement.cs
- DbDataRecord.cs
- NativeMethods.cs
- TimersDescriptionAttribute.cs
- XPathPatternBuilder.cs
- CommandField.cs
- PolyQuadraticBezierSegmentFigureLogic.cs
- DesignerHelpers.cs