Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx35 / System.WorkflowServices / System / Workflow / Activities / DynamicContractTypeBuilder.cs / 1305376 / DynamicContractTypeBuilder.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.Workflow.Activities { using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics.CodeAnalysis; using System.Drawing.Design; using System.Net.Security; using System.Reflection; using System.Reflection.Emit; using System.ServiceModel; using System.Threading; using System.Workflow.Activities.Design; using System.Workflow.ComponentModel; using System.Workflow.ComponentModel.Compiler; internal static class DynamicContractTypeBuilder { internal static readonly DependencyProperty DynamicContractTypesProperty = DependencyProperty.RegisterAttached("DynamicContractTypes", typeof(Dictionary), typeof(DynamicContractTypeBuilder), new PropertyMetadata(null, DependencyPropertyOptions.NonSerialized)); public static Type GetContractType(OperationInfo operationInfo, ReceiveActivity contextActivity) { if (operationInfo == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("operationInfo"); } if (contextActivity == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("contextActivity"); } if (string.IsNullOrEmpty(operationInfo.ContractName)) { return null; } Activity rootActivity = contextActivity.RootActivity; Dictionary contractTypes = rootActivity.GetValue(DynamicContractTypeBuilder.DynamicContractTypesProperty) as Dictionary ; if (contractTypes == null) { Activity definition = rootActivity.GetValue(Activity.WorkflowDefinitionProperty) as Activity; if (definition != null) { contractTypes = definition.GetValue(DynamicContractTypeBuilder.DynamicContractTypesProperty) as Dictionary ; } if (contractTypes != null) { rootActivity.SetValue(DynamicContractTypeBuilder.DynamicContractTypesProperty, contractTypes); } } if (contractTypes == null) { contractTypes = BuildContractTypes(rootActivity); rootActivity.SetValue(DynamicContractTypeBuilder.DynamicContractTypesProperty, contractTypes); } if (contractTypes.ContainsKey(operationInfo.ContractName)) { return contractTypes[operationInfo.ContractName]; } return null; } static Dictionary BuildContractTypes(Activity contextActivity) { if (contextActivity == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("contextActivity"); } Dictionary types = new Dictionary (); Walker walker = new Walker(true); walker.FoundActivity += delegate(Walker w, WalkerEventArgs args) { ReceiveActivity currentActivity = args.CurrentActivity as ReceiveActivity; if (currentActivity == null) { return; } OperationInfo operationInfo = currentActivity.ServiceOperationInfo as OperationInfo; if (operationInfo == null) { return; } if (string.IsNullOrEmpty(operationInfo.ContractName) || string.IsNullOrEmpty(operationInfo.Name)) { return; } if (!types.ContainsKey(operationInfo.ContractName)) { types.Add(operationInfo.ContractName, new ContractType(operationInfo.ContractName)); } bool hasReturnValue = false; bool duplicatedPositions = false; int maxPosition = -1; List parameterIndexs = new List (); foreach (OperationParameterInfo operationParameterInfo in operationInfo.Parameters) { if (operationParameterInfo.Position == -1) { hasReturnValue = true; } else { maxPosition = (maxPosition < operationParameterInfo.Position) ? operationParameterInfo.Position : maxPosition; } if (parameterIndexs.Contains(operationParameterInfo.Position)) { duplicatedPositions = true; break; } else { parameterIndexs.Add(operationParameterInfo.Position); } } if (duplicatedPositions || maxPosition > (operationInfo.Parameters.Count - (hasReturnValue ? 2 : 1))) { return; } ContractType contract = types[operationInfo.ContractName]; ContractMethodInfo methodInfo = new ContractMethodInfo(contract, operationInfo); }; walker.Walk(contextActivity); return types; } } } // 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
- MembershipSection.cs
- FontConverter.cs
- URLAttribute.cs
- ConvertTextFrag.cs
- ParameterModifier.cs
- AsyncOperationContext.cs
- UrlAuthFailedErrorFormatter.cs
- SettingsBase.cs
- SQLMembershipProvider.cs
- DataGridViewTextBoxEditingControl.cs
- AnnotationComponentChooser.cs
- SQLUtility.cs
- DrawingGroupDrawingContext.cs
- SessionPageStatePersister.cs
- ApplicationSecurityManager.cs
- FunctionImportElement.cs
- DocumentOutline.cs
- AVElementHelper.cs
- CanonicalFormWriter.cs
- Tokenizer.cs
- XmlArrayItemAttributes.cs
- FlowDocumentReaderAutomationPeer.cs
- WebPartZone.cs
- EdmType.cs
- TreeWalkHelper.cs
- PolyQuadraticBezierSegmentFigureLogic.cs
- PointCollection.cs
- DataGridViewCellCancelEventArgs.cs
- ActivationWorker.cs
- RegexCompilationInfo.cs
- MetabaseSettings.cs
- AmbientLight.cs
- ConstraintManager.cs
- PassportIdentity.cs
- QuaternionAnimation.cs
- PowerStatus.cs
- MethodImplAttribute.cs
- ResourceManagerWrapper.cs
- XhtmlBasicLabelAdapter.cs
- InternalConfigRoot.cs
- MultiplexingFormatMapping.cs
- EntryPointNotFoundException.cs
- PropertyChangingEventArgs.cs
- Set.cs
- StorageConditionPropertyMapping.cs
- DesignerTransactionCloseEvent.cs
- FontUnitConverter.cs
- Context.cs
- AnnotationHighlightLayer.cs
- BasePattern.cs
- InProcStateClientManager.cs
- DateTimeStorage.cs
- AvTrace.cs
- HTTPNotFoundHandler.cs
- BamlTreeMap.cs
- ImageConverter.cs
- TabControl.cs
- TypeReference.cs
- ResXFileRef.cs
- PolicyManager.cs
- WorkflowViewStateService.cs
- DispatchWrapper.cs
- XmlTextWriter.cs
- PropertyConverter.cs
- MarkupWriter.cs
- AmbientValueAttribute.cs
- SharedDp.cs
- FilterQuery.cs
- AssemblyInfo.cs
- DbTypeMap.cs
- DateTimeAutomationPeer.cs
- FileDataSourceCache.cs
- ReferenceSchema.cs
- OleDbPropertySetGuid.cs
- EncodingDataItem.cs
- PromptEventArgs.cs
- WebPartDisplayModeEventArgs.cs
- ConnectionStringSettingsCollection.cs
- ThreadStaticAttribute.cs
- ParameterCollection.cs
- StylusOverProperty.cs
- IgnoreDeviceFilterElement.cs
- HwndProxyElementProvider.cs
- XmlILCommand.cs
- AbstractDataSvcMapFileLoader.cs
- UnsafeNativeMethods.cs
- MexBindingBindingCollectionElement.cs
- Size3DValueSerializer.cs
- XmlSchemaExternal.cs
- TemplateInstanceAttribute.cs
- FigureHelper.cs
- MatrixStack.cs
- DataGridViewBand.cs
- MarkupCompilePass1.cs
- NativeMethods.cs
- ExpressionBuilderContext.cs
- SqlTriggerAttribute.cs
- DbReferenceCollection.cs
- ConfigurationValue.cs
- BrushMappingModeValidation.cs