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
- BasicCommandTreeVisitor.cs
- QueryPageSettingsEventArgs.cs
- CharAnimationUsingKeyFrames.cs
- List.cs
- SectionInput.cs
- XmlnsDictionary.cs
- SemanticTag.cs
- HandlerMappingMemo.cs
- latinshape.cs
- SendMailErrorEventArgs.cs
- GcSettings.cs
- EventEntry.cs
- ProtocolReflector.cs
- AppDomain.cs
- ChildChangedEventArgs.cs
- LocalizableResourceBuilder.cs
- BitmapEffectRenderDataResource.cs
- RenderingBiasValidation.cs
- Point4DConverter.cs
- BinHexEncoder.cs
- XmlUtilWriter.cs
- ModelFactory.cs
- JulianCalendar.cs
- IteratorFilter.cs
- MessageDispatch.cs
- IdnElement.cs
- nulltextcontainer.cs
- SourceChangedEventArgs.cs
- SchemaUtility.cs
- ConsoleTraceListener.cs
- MonitorWrapper.cs
- XPathNodeHelper.cs
- GetPageCompletedEventArgs.cs
- TextMarkerSource.cs
- NumericUpDown.cs
- HttpStreamMessageEncoderFactory.cs
- PasswordTextContainer.cs
- BooleanAnimationBase.cs
- XmlEnumAttribute.cs
- IRCollection.cs
- DbConvert.cs
- MgmtConfigurationRecord.cs
- BuildProviderCollection.cs
- ConnectorDragDropGlyph.cs
- WCFModelStrings.Designer.cs
- ISCIIEncoding.cs
- TransactedReceiveScope.cs
- WebScriptMetadataMessageEncoderFactory.cs
- XmlAnyElementAttribute.cs
- XmlByteStreamReader.cs
- OdbcConnectionHandle.cs
- XmlNamespaceMapping.cs
- BitArray.cs
- XPathItem.cs
- EditCommandColumn.cs
- SharedPersonalizationStateInfo.cs
- BamlBinaryReader.cs
- serverconfig.cs
- ClientUriBehavior.cs
- DataKeyCollection.cs
- EntityDataSourceDesignerHelper.cs
- EndEvent.cs
- SafeRegistryHandle.cs
- Evidence.cs
- TabPageDesigner.cs
- EditCommandColumn.cs
- DataServiceEntityAttribute.cs
- XmlDocumentFragment.cs
- NativeActivityAbortContext.cs
- WindowsRebar.cs
- Int16AnimationUsingKeyFrames.cs
- RandomNumberGenerator.cs
- ExtendedPropertyDescriptor.cs
- DataTableMappingCollection.cs
- FindResponse.cs
- WebMessageEncodingElement.cs
- CodeIdentifiers.cs
- WebPartConnectionsCancelVerb.cs
- RoutingConfiguration.cs
- IdentifierService.cs
- LockRecoveryTask.cs
- DesignerObjectListAdapter.cs
- HtmlEmptyTagControlBuilder.cs
- InlineCategoriesDocument.cs
- TextBox.cs
- RegistrySecurity.cs
- DeclaredTypeValidator.cs
- LineSegment.cs
- ItemsPanelTemplate.cs
- WaitHandleCannotBeOpenedException.cs
- CharEntityEncoderFallback.cs
- Int16.cs
- SimplePropertyEntry.cs
- CodeValidator.cs
- EdmRelationshipRoleAttribute.cs
- BamlVersionHeader.cs
- BaseCodeDomTreeGenerator.cs
- AnnotationResource.cs
- XPathExpr.cs
- XmlSchemaAll.cs