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
- EdmPropertyAttribute.cs
- ContentHostHelper.cs
- FastEncoder.cs
- ConnectionManagementElement.cs
- AspCompat.cs
- ContentType.cs
- DataComponentMethodGenerator.cs
- SparseMemoryStream.cs
- XmlSequenceWriter.cs
- IPEndPointCollection.cs
- ProxySimple.cs
- basemetadatamappingvisitor.cs
- DataGridViewToolTip.cs
- ScriptDescriptor.cs
- XPathScanner.cs
- TypeInitializationException.cs
- ExpressionStringBuilder.cs
- ConfigurationPropertyCollection.cs
- DocumentSchemaValidator.cs
- NonClientArea.cs
- ValueTypeFixupInfo.cs
- TreeIterators.cs
- Property.cs
- DeferrableContent.cs
- MoveSizeWinEventHandler.cs
- DragDeltaEventArgs.cs
- filewebresponse.cs
- DependencySource.cs
- ObjectDataSourceFilteringEventArgs.cs
- TextViewElement.cs
- HtmlInputImage.cs
- Type.cs
- GridView.cs
- DataBoundControl.cs
- EntryPointNotFoundException.cs
- WindowsRichEdit.cs
- DataServiceHostFactory.cs
- TaskFormBase.cs
- WindowsFormsEditorServiceHelper.cs
- GradientSpreadMethodValidation.cs
- Vector3DCollectionConverter.cs
- RadioButtonList.cs
- UIPropertyMetadata.cs
- SQLCharsStorage.cs
- ProfilePropertySettingsCollection.cs
- NumericUpDownAcceleration.cs
- SafeFileMappingHandle.cs
- ProgressBarBrushConverter.cs
- SqlBooleanizer.cs
- ProtocolProfile.cs
- EpmAttributeNameBuilder.cs
- SplineKeyFrames.cs
- TemplateKeyConverter.cs
- UnsafeNativeMethods.cs
- WmiEventSink.cs
- Object.cs
- FunctionCommandText.cs
- PenLineJoinValidation.cs
- Event.cs
- DATA_BLOB.cs
- DocumentSchemaValidator.cs
- AtomServiceDocumentSerializer.cs
- ButtonBase.cs
- SecurityAppliedMessage.cs
- BrowserInteropHelper.cs
- HttpProfileGroupBase.cs
- RelationshipDetailsRow.cs
- PropertyInfoSet.cs
- DbParameterHelper.cs
- TextRangeSerialization.cs
- ResXResourceWriter.cs
- BindingGroup.cs
- ZipArchive.cs
- SortKey.cs
- BufferModeSettings.cs
- SafeRegistryKey.cs
- GenericTextProperties.cs
- InitializerFacet.cs
- PtsHelper.cs
- TypeTypeConverter.cs
- HtmlInputSubmit.cs
- RequestBringIntoViewEventArgs.cs
- Stylesheet.cs
- EventlogProvider.cs
- FileLogRecord.cs
- SelectedDatesCollection.cs
- ResourceReferenceExpression.cs
- SafeEventLogWriteHandle.cs
- SignatureToken.cs
- TextServicesPropertyRanges.cs
- WebPartDisplayMode.cs
- OleDbInfoMessageEvent.cs
- ControlBuilderAttribute.cs
- SQLResource.cs
- DESCryptoServiceProvider.cs
- DataObjectCopyingEventArgs.cs
- SecurityAlgorithmSuite.cs
- OperationResponse.cs
- CodeActivityContext.cs
- ErrorWebPart.cs