Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Activities / Executors / InvokeBase.cs / 1305376 / InvokeBase.cs
using System; using System.Reflection; using System.Collections; using System.Diagnostics; using System.Workflow.ComponentModel; using System.Workflow.Runtime; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; namespace System.Workflow.Activities { internal static class InvokeHelper { internal static void InitializeParameters(MethodInfo methodBase, WorkflowParameterBindingCollection parameterBindings) { ParameterInfo[] parameters = methodBase.GetParameters(); foreach (ParameterInfo parameter in parameters) { if (!parameterBindings.Contains(parameter.Name)) parameterBindings.Add(new WorkflowParameterBinding(parameter.Name)); } if (methodBase.ReturnType != typeof(void)) { if (!parameterBindings.Contains("(ReturnValue)")) parameterBindings.Add(new WorkflowParameterBinding("(ReturnValue)")); } } internal static object[] GetParameters(MethodBase methodBase, WorkflowParameterBindingCollection parameterBindings) { ParameterInfo[] formalParameters = methodBase.GetParameters(); object[] actualParameters = new object[formalParameters.Length]; int index = 0; foreach (ParameterInfo formalParameter in formalParameters) { if (parameterBindings.Contains(formalParameter.Name)) { WorkflowParameterBinding binding = parameterBindings[formalParameter.Name]; actualParameters[index] = binding.Value; } index++; } return actualParameters; } internal static object[] GetParameters(MethodBase methodBase, WorkflowParameterBindingCollection parameterBindings, out ParameterModifier[] parameterModifiers) { ParameterInfo[] formalParameters = methodBase.GetParameters(); object[] actualParameters = new object[formalParameters.Length]; if (actualParameters.Length == 0) { parameterModifiers = new ParameterModifier[0]; return actualParameters; } int index = 0; BinaryFormatter formatter = null; ParameterModifier parameterModifier = new ParameterModifier(actualParameters.Length); foreach (ParameterInfo formalParameter in formalParameters) { if (formalParameter.ParameterType.IsByRef) { parameterModifier[index] = true; } else { parameterModifier[index] = false; } if (parameterBindings.Contains(formalParameter.Name)) { WorkflowParameterBinding binding = parameterBindings[formalParameter.Name]; if(formatter == null) formatter = new BinaryFormatter(); actualParameters[index] = CloneOutboundValue(binding.Value, formatter, formalParameter.Name); } index++; } parameterModifiers = new ParameterModifier[1] { parameterModifier }; return actualParameters; } internal static object CloneOutboundValue(object source, BinaryFormatter formatter, string name) { if (source == null || source.GetType().IsValueType) return source; ICloneable clone = source as ICloneable; if (clone != null) return clone.Clone(); System.IO.MemoryStream stream = new System.IO.MemoryStream(1024); try { formatter.Serialize(stream, source); } catch (SerializationException e) { throw new InvalidOperationException(SR.GetString(SR.Error_CallExternalMethodArgsSerializationException, name), e); } stream.Position = 0; object cloned = formatter.Deserialize(stream); return cloned; } internal static void SaveOutRefParameters(object[] actualParameters, MethodBase methodBase, WorkflowParameterBindingCollection parameterBindings) { int index = 0; BinaryFormatter formatter = null; foreach(ParameterInfo formalParameter in methodBase.GetParameters()) { if (parameterBindings.Contains(formalParameter.Name)) { if (formalParameter.ParameterType.IsByRef || (formalParameter.IsIn && formalParameter.IsOut)) { WorkflowParameterBinding binding = parameterBindings[formalParameter.Name]; if (formatter == null) formatter = new BinaryFormatter(); binding.Value = CloneOutboundValue(actualParameters[index], formatter, formalParameter.Name); ; } } index++; } } } } // 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
- OrderedDictionaryStateHelper.cs
- TrackingConditionCollection.cs
- _SpnDictionary.cs
- WebConfigurationHost.cs
- DefaultValueAttribute.cs
- parserscommon.cs
- WindowsGraphicsCacheManager.cs
- CounterNameConverter.cs
- TypeToStringValueConverter.cs
- User.cs
- EmbeddedObject.cs
- MD5.cs
- HtmlHead.cs
- Logging.cs
- CellPartitioner.cs
- RegexBoyerMoore.cs
- HashHelpers.cs
- ExternalCalls.cs
- DataListItemEventArgs.cs
- XamlSerializer.cs
- initElementDictionary.cs
- TypeGeneratedEventArgs.cs
- SerTrace.cs
- Debug.cs
- OdbcError.cs
- ServiceOperation.cs
- PreviewKeyDownEventArgs.cs
- RelationshipEndCollection.cs
- ExpandCollapseProviderWrapper.cs
- DbParameterCollectionHelper.cs
- DirectionalLight.cs
- ModelItemCollection.cs
- DecoderNLS.cs
- TabControl.cs
- GradientStop.cs
- PassportPrincipal.cs
- ItemType.cs
- QilDataSource.cs
- TextSelection.cs
- SqlDataSource.cs
- ContentElement.cs
- Stylesheet.cs
- TypeSystem.cs
- StrokeCollection2.cs
- GenericUriParser.cs
- ZoneIdentityPermission.cs
- Stack.cs
- XmlBinaryReader.cs
- SystemWebExtensionsSectionGroup.cs
- AddInProcess.cs
- StringTraceRecord.cs
- TypeDefinition.cs
- EventSetter.cs
- BitmapCache.cs
- SamlSubjectStatement.cs
- DataServiceHostFactory.cs
- _AuthenticationState.cs
- ZipIOExtraField.cs
- ItemsChangedEventArgs.cs
- PropertyValueChangedEvent.cs
- RoleBoolean.cs
- ChtmlTextWriter.cs
- DesignTimeParseData.cs
- CodeIterationStatement.cs
- InputProcessorProfiles.cs
- Clipboard.cs
- PtsContext.cs
- PackWebRequestFactory.cs
- QilLiteral.cs
- InvalidFilterCriteriaException.cs
- AppDomainCompilerProxy.cs
- DisableDpiAwarenessAttribute.cs
- clipboard.cs
- DataGridViewCellEventArgs.cs
- ClientTargetSection.cs
- FileAuthorizationModule.cs
- TrustManager.cs
- TimeSpanOrInfiniteConverter.cs
- ColorConvertedBitmap.cs
- IntSecurity.cs
- ListControlActionList.cs
- Floater.cs
- KnowledgeBase.cs
- NodeInfo.cs
- ThaiBuddhistCalendar.cs
- QualifiedId.cs
- HandledMouseEvent.cs
- User.cs
- PKCS1MaskGenerationMethod.cs
- ICspAsymmetricAlgorithm.cs
- CurrentChangingEventArgs.cs
- RepeaterCommandEventArgs.cs
- RadioButtonAutomationPeer.cs
- OdbcConnectionHandle.cs
- TemplatePropertyEntry.cs
- CollaborationHelperFunctions.cs
- HtmlPhoneCallAdapter.cs
- ProcessProtocolHandler.cs
- DateTimeSerializationSection.cs
- ExtenderControl.cs