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);
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.
//------------------------------------------------------------
// 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
- FreeIndexList.cs
- PopOutPanel.cs
- SectionXmlInfo.cs
- BeginStoryboard.cs
- ToolbarAUtomationPeer.cs
- ListView.cs
- SystemBrushes.cs
- SiteMapDataSource.cs
- RefreshPropertiesAttribute.cs
- XmlSchemaChoice.cs
- X509AudioLogo.cs
- EDesignUtil.cs
- SafeProcessHandle.cs
- WebPartConnectionsConnectVerb.cs
- _NestedMultipleAsyncResult.cs
- OrderByBuilder.cs
- TableLayoutPanelCellPosition.cs
- DataSvcMapFileSerializer.cs
- DbConnectionHelper.cs
- QueryRewriter.cs
- WorkflowWebService.cs
- AttachedPropertyBrowsableForTypeAttribute.cs
- ResourcePart.cs
- LoadGrammarCompletedEventArgs.cs
- AutomationPropertyInfo.cs
- XhtmlCssHandler.cs
- ClipboardProcessor.cs
- LinkDescriptor.cs
- Pair.cs
- Label.cs
- XslException.cs
- ObjectDataSourceFilteringEventArgs.cs
- AlgoModule.cs
- _RegBlobWebProxyDataBuilder.cs
- FixedLineResult.cs
- RoleServiceManager.cs
- EffectiveValueEntry.cs
- ControlPaint.cs
- CodeStatementCollection.cs
- ProfileService.cs
- PageSetupDialog.cs
- ToolboxComponentsCreatingEventArgs.cs
- WindowShowOrOpenTracker.cs
- ViewCellSlot.cs
- HierarchicalDataSourceControl.cs
- IndexedSelectQueryOperator.cs
- XmlChildNodes.cs
- OleServicesContext.cs
- DataGridColumnCollection.cs
- ConfigXmlAttribute.cs
- ControlPaint.cs
- DesignerVerb.cs
- EdmConstants.cs
- SmtpAuthenticationManager.cs
- Constants.cs
- LocalizableResourceBuilder.cs
- ListView.cs
- RoleServiceManager.cs
- FontWeightConverter.cs
- XmlSchemaAnnotated.cs
- MetadataSource.cs
- OpacityConverter.cs
- KeyToListMap.cs
- SendOperation.cs
- AppDomainProtocolHandler.cs
- ConstantCheck.cs
- _TLSstream.cs
- PreloadedPackages.cs
- XmlFileEditor.cs
- IndexedGlyphRun.cs
- DataControlFieldCell.cs
- _RequestCacheProtocol.cs
- SystemException.cs
- SignedXml.cs
- SerialPinChanges.cs
- FamilyTypeface.cs
- SchemaMerger.cs
- ValueTypeFixupInfo.cs
- PKCS1MaskGenerationMethod.cs
- Baml2006ReaderContext.cs
- UpDownEvent.cs
- TypeResolver.cs
- Annotation.cs
- OperationFormatStyle.cs
- UnmanagedMarshal.cs
- CombinedGeometry.cs
- Stroke.cs
- WebPartConnectionsCancelEventArgs.cs
- SelfIssuedAuthProofToken.cs
- XmlSchemaComplexContentExtension.cs
- MethodSignatureGenerator.cs
- Gdiplus.cs
- ProfessionalColors.cs
- PartitionedStream.cs
- DbDeleteCommandTree.cs
- Rect3D.cs
- StubHelpers.cs
- CapabilitiesRule.cs
- RequestResizeEvent.cs
- SchemaImporter.cs