Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ToolStripSystemRenderer.cs
- SplitterEvent.cs
- ChangeNode.cs
- CounterCreationData.cs
- FormViewDeletedEventArgs.cs
- ErrorStyle.cs
- SerialPinChanges.cs
- OutputCacheModule.cs
- MetaType.cs
- ContextMenuService.cs
- PropertyCollection.cs
- RequestTimeoutManager.cs
- ErrorWrapper.cs
- XmlElement.cs
- ComponentChangingEvent.cs
- UndoManager.cs
- DataGridViewRowStateChangedEventArgs.cs
- ClosableStream.cs
- DesignerVerbCollection.cs
- CultureData.cs
- BoolLiteral.cs
- SmtpReplyReader.cs
- Partitioner.cs
- DataViewListener.cs
- DataObject.cs
- WebConfigManager.cs
- MILUtilities.cs
- SubMenuStyleCollection.cs
- _WinHttpWebProxyDataBuilder.cs
- ListBoxItemAutomationPeer.cs
- InvokeWebService.cs
- AnimationStorage.cs
- WindowsClaimSet.cs
- OdbcCommandBuilder.cs
- BehaviorEditorPart.cs
- RadioButtonList.cs
- CodeObjectCreateExpression.cs
- ProviderIncompatibleException.cs
- PeerContact.cs
- FileStream.cs
- PageThemeCodeDomTreeGenerator.cs
- PropertiesTab.cs
- SmiContextFactory.cs
- Int32Collection.cs
- WorkflowIdleBehavior.cs
- ListenerHandler.cs
- FacetDescriptionElement.cs
- httpapplicationstate.cs
- DocumentOrderComparer.cs
- SqlProvider.cs
- MethodInfo.cs
- IntranetCredentialPolicy.cs
- WindowsGraphicsCacheManager.cs
- LayoutSettings.cs
- ManipulationDeltaEventArgs.cs
- ContainerControl.cs
- HeaderedContentControl.cs
- RSATokenProvider.cs
- Int64AnimationBase.cs
- StorageInfo.cs
- EmbeddedObject.cs
- UnsafeNativeMethodsMilCoreApi.cs
- HtmlInputRadioButton.cs
- DrawingImage.cs
- JavaScriptObjectDeserializer.cs
- TaskResultSetter.cs
- WebPartHelpVerb.cs
- brushes.cs
- BitStack.cs
- XmlQueryTypeFactory.cs
- CodeDomComponentSerializationService.cs
- MailWriter.cs
- ButtonFlatAdapter.cs
- unitconverter.cs
- CodeAssignStatement.cs
- ThicknessConverter.cs
- NetNamedPipeBindingElement.cs
- MemberJoinTreeNode.cs
- FieldAccessException.cs
- ViewBase.cs
- BasicHttpBindingCollectionElement.cs
- Divide.cs
- WebPartHelpVerb.cs
- DataViewSetting.cs
- XmlEncodedRawTextWriter.cs
- NotImplementedException.cs
- BaseParser.cs
- followingquery.cs
- WorkflowMarkupSerializationProvider.cs
- WebContext.cs
- Size3D.cs
- StringExpressionSet.cs
- KeyEventArgs.cs
- DynamicDataExtensions.cs
- MetadataFile.cs
- LeafCellTreeNode.cs
- TreeNodeMouseHoverEvent.cs
- Main.cs
- WeakReference.cs
- _NetRes.cs