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
- MemoryResponseElement.cs
- ConstraintCollection.cs
- EdmRelationshipRoleAttribute.cs
- FormViewCommandEventArgs.cs
- Hash.cs
- Renderer.cs
- DrawingBrush.cs
- DataGridLinkButton.cs
- JavascriptCallbackBehaviorAttribute.cs
- HtmlLinkAdapter.cs
- DesignTimeParseData.cs
- DataPointer.cs
- XsdValidatingReader.cs
- NextPreviousPagerField.cs
- PropertyGeneratedEventArgs.cs
- SymbolEqualComparer.cs
- WebPartDisplayModeEventArgs.cs
- Separator.cs
- ChameleonKey.cs
- OptimalTextSource.cs
- SingleSelectRootGridEntry.cs
- LocalizableResourceBuilder.cs
- QilDataSource.cs
- ResXDataNode.cs
- DefaultCompensation.cs
- externdll.cs
- Trigger.cs
- Message.cs
- SourceLineInfo.cs
- HeaderPanel.cs
- _ListenerRequestStream.cs
- TreeView.cs
- graph.cs
- DeclarativeCatalogPartDesigner.cs
- PolyLineSegment.cs
- OleDbConnection.cs
- ResXDataNode.cs
- MethodCallTranslator.cs
- SourceInterpreter.cs
- ZipIOExtraFieldZip64Element.cs
- SqlDataSource.cs
- InkCanvasInnerCanvas.cs
- ResourcePart.cs
- CommandManager.cs
- WebPartRestoreVerb.cs
- CompilationLock.cs
- AnnotationAdorner.cs
- ConnectionPoint.cs
- BooleanFacetDescriptionElement.cs
- ListViewCancelEventArgs.cs
- TextDecorations.cs
- ObjectPersistData.cs
- TypeDefinition.cs
- TdsParser.cs
- DbReferenceCollection.cs
- UICuesEvent.cs
- PackWebResponse.cs
- DeviceFiltersSection.cs
- LoadedEvent.cs
- TableParaClient.cs
- XmlSerializerAssemblyAttribute.cs
- Sentence.cs
- SettingsContext.cs
- ResourceContainer.cs
- ForceCopyBuildProvider.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- OdbcParameterCollection.cs
- NativeMethods.cs
- CacheEntry.cs
- DeviceContext.cs
- ColorPalette.cs
- FontDifferentiator.cs
- ReservationCollection.cs
- ActiveXSite.cs
- TrackingProvider.cs
- SqlTypesSchemaImporter.cs
- SerializationAttributes.cs
- XmlSchemaImport.cs
- RadioButtonFlatAdapter.cs
- BridgeDataRecord.cs
- XmlElementElementCollection.cs
- SaveFileDialog.cs
- TimeStampChecker.cs
- DataGridViewImageColumn.cs
- XmlTypeMapping.cs
- Math.cs
- BlurEffect.cs
- UndoManager.cs
- Attributes.cs
- MouseEvent.cs
- Marshal.cs
- TcpTransportManager.cs
- FileDataSourceCache.cs
- IISUnsafeMethods.cs
- CustomCategoryAttribute.cs
- DataServiceExpressionVisitor.cs
- TransportContext.cs
- PermissionAttributes.cs
- GeometryHitTestParameters.cs
- Int32RectConverter.cs