Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.ServiceModel.Activities / System / ServiceModel / Activities / SendParametersContent.cs / 1305376 / SendParametersContent.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.ServiceModel.Activities { using System.Activities; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Runtime; using System.Runtime.Collections; using System.ServiceModel.Description; using System.Windows.Markup; [ContentProperty("Parameters")] public sealed class SendParametersContent : SendContent { string[] argumentNames; Type[] argumentTypes; public SendParametersContent() : base() { this.Parameters = new OrderedDictionary(); } public SendParametersContent(IDictionary parameters) : base() { if (parameters == null) { throw FxTrace.Exception.ArgumentNull("parameters"); } this.Parameters = new OrderedDictionary (parameters); } public IDictionary Parameters { get; private set; } internal string[] ArgumentNames { get { if (this.argumentNames == null) { ShredParameters(); } return this.argumentNames; } } internal Type[] ArgumentTypes { get { if (this.argumentTypes == null) { ShredParameters(); } return this.argumentTypes; } } internal override bool IsFault { get { if (this.ArgumentTypes.Length == 1) { return ContractInferenceHelper.ExceptionType.IsAssignableFrom(this.ArgumentTypes[0]); } else { return false; } } } void ShredParameters() { // Turn Dictionary into ordered Argument arrays int argumentCount = this.Parameters.Count; this.argumentNames = new string[argumentCount]; this.argumentTypes = new Type[argumentCount]; int index = 0; foreach (KeyValuePair pair in this.Parameters) { this.argumentNames[index] = pair.Key; this.argumentTypes[index] = pair.Value.ArgumentType; index++; } } internal override void CacheMetadata(ActivityMetadata metadata, Activity owner, string operationName) { // force a shred for every CacheMetadata call ShredParameters(); int index = 0; foreach (Type argumentType in this.argumentTypes) { if (argumentType == null || argumentType == TypeHelper.VoidType) { metadata.AddValidationError(SR.ArgumentCannotHaveNullOrVoidType(owner.DisplayName, argumentNames[index])); } if (argumentType == MessageDescription.TypeOfUntypedMessage || MessageBuilder.IsMessageContract(argumentType)) { metadata.AddValidationError(SR.SendParametersContentDoesNotSupportMessage(owner.DisplayName, argumentNames[index])); } index++; } if (!metadata.HasViolations) { foreach (KeyValuePair pair in this.Parameters) { RuntimeArgument newRuntimeArgument = new RuntimeArgument(pair.Key, pair.Value.ArgumentType, ArgumentDirection.In); metadata.Bind(pair.Value, newRuntimeArgument); metadata.AddArgument(newRuntimeArgument); } } } internal override void ConfigureInternalSend(InternalSendMessage internalSendMessage, out ToRequest requestFormatter) { //Zero or more arguments requestFormatter = new ToRequest(); foreach (KeyValuePair parameter in this.Parameters) { requestFormatter.Parameters.Add(InArgument.CreateReference(parameter.Value, parameter.Key)); } } internal override void ConfigureInternalSendReply(InternalSendMessage internalSendMessage, out ToReply responseFormatter) { responseFormatter = new ToReply(); foreach (KeyValuePair parameter in this.Parameters) { responseFormatter.Parameters.Add(InArgument.CreateReference(parameter.Value, parameter.Key)); } } internal override void InferMessageDescription(OperationDescription operation, object owner, MessageDirection direction) { ContractInferenceHelper.CheckForDisposableParameters(operation, this.ArgumentTypes); string overridingAction = owner is Send ? ((Send)owner).Action : ((SendReply)owner).Action; if (direction == MessageDirection.Input) { ContractInferenceHelper.AddInputMessage(operation, overridingAction, this.ArgumentNames, this.ArgumentTypes); } else { ContractInferenceHelper.AddOutputMessage(operation, overridingAction, this.ArgumentNames, this.ArgumentTypes); } } } } // 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
- WorkflowDebuggerSteppingAttribute.cs
- TextContainerChangedEventArgs.cs
- SamlAuthenticationStatement.cs
- Vector3D.cs
- DispatcherEventArgs.cs
- ClassicBorderDecorator.cs
- Wizard.cs
- SoapProtocolImporter.cs
- SqlDataSourceTableQuery.cs
- DependencySource.cs
- UserPreferenceChangedEventArgs.cs
- PixelFormatConverter.cs
- TraceListeners.cs
- RelationshipWrapper.cs
- FilterQuery.cs
- BufferedGraphicsContext.cs
- WindowAutomationPeer.cs
- ToolBarButtonClickEvent.cs
- RelationshipEndMember.cs
- DataGridViewTopLeftHeaderCell.cs
- Config.cs
- DataRelationPropertyDescriptor.cs
- TypeListConverter.cs
- EdmItemError.cs
- DocumentPageView.cs
- XmlCharacterData.cs
- MergePropertyDescriptor.cs
- SourceFileInfo.cs
- webeventbuffer.cs
- IEnumerable.cs
- TreeNodeStyle.cs
- DurableInstanceProvider.cs
- StackOverflowException.cs
- MsmqUri.cs
- UIHelper.cs
- RtfControls.cs
- PermissionAttributes.cs
- DynamicQueryStringParameter.cs
- SubclassTypeValidatorAttribute.cs
- SortQuery.cs
- DefaultSection.cs
- TransactionInformation.cs
- WebBaseEventKeyComparer.cs
- OrderPreservingPipeliningSpoolingTask.cs
- StaticDataManager.cs
- Pair.cs
- OnOperation.cs
- sqlpipe.cs
- AnimationStorage.cs
- RawAppCommandInputReport.cs
- QueryLifecycle.cs
- CryptoProvider.cs
- SymLanguageVendor.cs
- MatrixAnimationUsingKeyFrames.cs
- RecommendedAsConfigurableAttribute.cs
- FontDifferentiator.cs
- FlowDocumentPaginator.cs
- CompModSwitches.cs
- SchemaConstraints.cs
- HtmlGenericControl.cs
- HttpDebugHandler.cs
- BlurBitmapEffect.cs
- Container.cs
- AnnotationComponentManager.cs
- XamlClipboardData.cs
- AttributeCollection.cs
- SettingsPropertyWrongTypeException.cs
- Privilege.cs
- DrawListViewSubItemEventArgs.cs
- WebPartVerb.cs
- InfoCardBaseException.cs
- StateValidator.cs
- AuthenticationManager.cs
- NamedElement.cs
- TextBoxBase.cs
- InternalSafeNativeMethods.cs
- sapiproxy.cs
- BitmapEffectInput.cs
- GeometryCombineModeValidation.cs
- Soap.cs
- XmlSchemaObjectTable.cs
- PageEventArgs.cs
- SimpleType.cs
- MediaEntryAttribute.cs
- Menu.cs
- EntityClientCacheKey.cs
- ProfileProvider.cs
- LinkedResource.cs
- UpDownBase.cs
- MetadataArtifactLoaderCompositeFile.cs
- XmlHierarchyData.cs
- ParentQuery.cs
- SignatureGenerator.cs
- SystemThemeKey.cs
- HttpRuntimeSection.cs
- ObjectKeyFrameCollection.cs
- ExceptionHandlers.cs
- EntryIndex.cs
- MetricEntry.cs
- FormatterConverter.cs