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
- ListViewDeletedEventArgs.cs
- XmlReaderDelegator.cs
- SQLDateTime.cs
- BitmapCodecInfoInternal.cs
- TranslateTransform3D.cs
- ScheduleChanges.cs
- InternalSafeNativeMethods.cs
- Token.cs
- RoleServiceManager.cs
- AsymmetricCryptoHandle.cs
- RSAPKCS1SignatureFormatter.cs
- ComponentChangedEvent.cs
- HtmlString.cs
- ExportOptions.cs
- GenericTypeParameterBuilder.cs
- IgnorePropertiesAttribute.cs
- MouseActionConverter.cs
- RadioButtonList.cs
- PlainXmlSerializer.cs
- WebPartAddingEventArgs.cs
- DetailsViewPageEventArgs.cs
- BaseTypeViewSchema.cs
- CoreSwitches.cs
- AuthenticationConfig.cs
- ADConnectionHelper.cs
- AuthorizationRuleCollection.cs
- ContextMenuAutomationPeer.cs
- MemberMemberBinding.cs
- CachedPathData.cs
- TransactionFilter.cs
- WebResourceAttribute.cs
- UnauthorizedAccessException.cs
- StringReader.cs
- userdatakeys.cs
- PipelineModuleStepContainer.cs
- ToolStripItemClickedEventArgs.cs
- AuthorizationRuleCollection.cs
- SimpleApplicationHost.cs
- WorkflowApplicationUnhandledExceptionEventArgs.cs
- SqlConnectionPoolGroupProviderInfo.cs
- FormViewCommandEventArgs.cs
- OneOf.cs
- FileChangesMonitor.cs
- SafeFreeMibTable.cs
- VirtualizedItemProviderWrapper.cs
- UnauthorizedAccessException.cs
- GridViewAutomationPeer.cs
- LogStream.cs
- StrongNameIdentityPermission.cs
- DCSafeHandle.cs
- TTSEngineTypes.cs
- AdornedElementPlaceholder.cs
- JavaScriptObjectDeserializer.cs
- XmlSchemaChoice.cs
- WebRequestModulesSection.cs
- MDIClient.cs
- Inflater.cs
- Interlocked.cs
- Path.cs
- BitmapScalingModeValidation.cs
- SiteMap.cs
- SqlServices.cs
- OutputCacheProfile.cs
- WebPartConnectVerb.cs
- HierarchicalDataSourceIDConverter.cs
- SiteMapNodeItemEventArgs.cs
- SubMenuStyleCollection.cs
- ObjectContext.cs
- Matrix3DValueSerializer.cs
- ContainerFilterService.cs
- LocalizableAttribute.cs
- SiteMapPath.cs
- Point3D.cs
- ScriptResourceHandler.cs
- DoubleAnimation.cs
- InputLanguageSource.cs
- SQLSingleStorage.cs
- ViewStateModeByIdAttribute.cs
- XmlTypeAttribute.cs
- KnownTypeAttribute.cs
- safex509handles.cs
- HtmlObjectListAdapter.cs
- EventDrivenDesigner.cs
- StorageRoot.cs
- AdornerDecorator.cs
- TrueReadOnlyCollection.cs
- HtmlListAdapter.cs
- DelegateHelpers.cs
- FileDialogPermission.cs
- LinqDataSourceEditData.cs
- CommonGetThemePartSize.cs
- DataListItemCollection.cs
- EnumerableRowCollectionExtensions.cs
- MaterializeFromAtom.cs
- BindToObject.cs
- AttributeEmitter.cs
- FormatException.cs
- UIElementCollection.cs
- WaitHandleCannotBeOpenedException.cs
- Cursors.cs