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
- HtmlInputReset.cs
- IsolationInterop.cs
- List.cs
- ExpressionReplacer.cs
- OleDbCommandBuilder.cs
- ResourceLoader.cs
- MasterPageBuildProvider.cs
- SqlCacheDependencyDatabaseCollection.cs
- NullableLongAverageAggregationOperator.cs
- XMLDiffLoader.cs
- DisplayMemberTemplateSelector.cs
- DateTimeValueSerializer.cs
- StorageMappingItemCollection.cs
- SecurityPolicySection.cs
- BinHexDecoder.cs
- DataKeyArray.cs
- GridViewUpdateEventArgs.cs
- ReadOnlyAttribute.cs
- MergeFilterQuery.cs
- DataGridLengthConverter.cs
- MachineKeySection.cs
- PrivacyNoticeBindingElementImporter.cs
- BamlWriter.cs
- ProgressBar.cs
- MsmqIntegrationSecurity.cs
- ImpersonateTokenRef.cs
- EventLogger.cs
- CodeTypeDeclarationCollection.cs
- ListViewPagedDataSource.cs
- CodeMemberMethod.cs
- ProfileElement.cs
- BaseTypeViewSchema.cs
- MenuItemBinding.cs
- LoginName.cs
- HtmlProps.cs
- NeutralResourcesLanguageAttribute.cs
- SortDescriptionCollection.cs
- PrivilegeNotHeldException.cs
- HostedNamedPipeTransportManager.cs
- ClientSponsor.cs
- AssertFilter.cs
- SkewTransform.cs
- PropertyMetadata.cs
- MailHeaderInfo.cs
- OdbcReferenceCollection.cs
- XmlSchema.cs
- ArrowControl.xaml.cs
- WizardSideBarListControlItemEventArgs.cs
- ExceptionValidationRule.cs
- ColumnMapCopier.cs
- DataGridViewIntLinkedList.cs
- HijriCalendar.cs
- DefaultMergeHelper.cs
- ScalarType.cs
- KerberosReceiverSecurityToken.cs
- XmlEntityReference.cs
- CodeRemoveEventStatement.cs
- Border.cs
- ListBase.cs
- EditorResources.cs
- FtpWebResponse.cs
- TextFormatterHost.cs
- TreeNodeMouseHoverEvent.cs
- SystemParameters.cs
- GenericEnumerator.cs
- ListChangedEventArgs.cs
- ReferenceList.cs
- IsolatedStorageFilePermission.cs
- MemberProjectedSlot.cs
- HitTestParameters3D.cs
- ToolStrip.cs
- FlowLayoutPanel.cs
- StylusPointDescription.cs
- PersonalizationDictionary.cs
- InstalledVoice.cs
- BoolExpr.cs
- nulltextnavigator.cs
- UpdatePanel.cs
- PropertyRecord.cs
- _ListenerResponseStream.cs
- SiteOfOriginPart.cs
- EdmItemError.cs
- SubclassTypeValidator.cs
- CalendarDataBindingHandler.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- FlowDocumentReaderAutomationPeer.cs
- HtmlForm.cs
- CollectionBuilder.cs
- PageParser.cs
- ProcessManager.cs
- RequestTimeoutManager.cs
- TreeNodeClickEventArgs.cs
- MLangCodePageEncoding.cs
- FileRecordSequenceHelper.cs
- XmlUtf8RawTextWriter.cs
- WindowsSysHeader.cs
- ListDictionaryInternal.cs
- ContextStaticAttribute.cs
- ObjectNavigationPropertyMapping.cs
- XPathEmptyIterator.cs