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
- EntityDataReader.cs
- EventsTab.cs
- TransformConverter.cs
- RuntimeConfig.cs
- BamlVersionHeader.cs
- BrowserCapabilitiesCodeGenerator.cs
- SecurityDescriptor.cs
- Guid.cs
- EntityDataSourceContextDisposingEventArgs.cs
- Enum.cs
- WhileDesigner.cs
- DelimitedListTraceListener.cs
- ServiceCredentials.cs
- PriorityQueue.cs
- AdditionalEntityFunctions.cs
- IDispatchConstantAttribute.cs
- SizeIndependentAnimationStorage.cs
- ApplyHostConfigurationBehavior.cs
- DbXmlEnabledProviderManifest.cs
- StateDesigner.LayoutSelectionGlyph.cs
- SubtreeProcessor.cs
- DragDeltaEventArgs.cs
- StreamInfo.cs
- XmlSchema.cs
- SingleResultAttribute.cs
- SearchForVirtualItemEventArgs.cs
- StringCollection.cs
- XmlDocumentType.cs
- BaseTemplatedMobileComponentEditor.cs
- XPathParser.cs
- QuotedPrintableStream.cs
- CustomErrorCollection.cs
- ClientConfigPaths.cs
- PageMediaType.cs
- LineInfo.cs
- SmiRequestExecutor.cs
- CultureData.cs
- GradientStop.cs
- TextServicesDisplayAttribute.cs
- PeerHopCountAttribute.cs
- MDIClient.cs
- TextFragmentEngine.cs
- ViewKeyConstraint.cs
- MarkupCompilePass2.cs
- NativeRecognizer.cs
- DispatcherTimer.cs
- MarkupCompilePass2.cs
- AvTraceFormat.cs
- FontStretch.cs
- Page.cs
- WebPartZoneBase.cs
- StagingAreaInputItem.cs
- TypeLoadException.cs
- TypeUtil.cs
- LinearGradientBrush.cs
- WebHttpBinding.cs
- CustomErrorsSectionWrapper.cs
- RangeValuePatternIdentifiers.cs
- AspNetSynchronizationContext.cs
- Blend.cs
- ActiveXContainer.cs
- RepeaterItemCollection.cs
- streamingZipPartStream.cs
- TextTreeTextElementNode.cs
- ScalarOps.cs
- DependencyPropertyHelper.cs
- WebZone.cs
- FontCacheLogic.cs
- ConfigurationLocationCollection.cs
- ScriptControlManager.cs
- MULTI_QI.cs
- HttpServerVarsCollection.cs
- DataTrigger.cs
- SecurityElement.cs
- FieldMetadata.cs
- XmlTextReaderImpl.cs
- DefinitionUpdate.cs
- VariableQuery.cs
- PropertyInformation.cs
- DataGridViewAccessibleObject.cs
- ExpressionBuilder.cs
- x509store.cs
- SqlDataSourceConfigureSelectPanel.cs
- QilPatternVisitor.cs
- XPathNavigatorKeyComparer.cs
- GlobalizationAssembly.cs
- PasswordTextContainer.cs
- BuildManagerHost.cs
- AuthenticationModuleElement.cs
- PlacementWorkspace.cs
- GenericIdentity.cs
- WinFormsComponentEditor.cs
- InkCanvasSelection.cs
- XslAstAnalyzer.cs
- NetworkInformationException.cs
- RSAPKCS1SignatureFormatter.cs
- Variable.cs
- LoginDesigner.cs
- DataGridViewCell.cs
- IgnoreFlushAndCloseStream.cs