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
- TypefaceCollection.cs
- DrawingGroup.cs
- StreamAsIStream.cs
- ExtendedProtectionPolicy.cs
- Debugger.cs
- FixedNode.cs
- DecoderFallbackWithFailureFlag.cs
- XsltOutput.cs
- RepeatButtonAutomationPeer.cs
- InheritanceAttribute.cs
- NamedObject.cs
- DbConnectionHelper.cs
- TextChange.cs
- UInt16Storage.cs
- SqlDataSource.cs
- ShutDownListener.cs
- HttpRequestCacheValidator.cs
- SecUtil.cs
- SecurityCriticalDataForSet.cs
- LinkedResource.cs
- Label.cs
- StateMachine.cs
- XPathConvert.cs
- TabletDeviceInfo.cs
- DCSafeHandle.cs
- TileBrush.cs
- FixedSOMTableCell.cs
- DateTimeParse.cs
- GridView.cs
- FrameworkElement.cs
- cookie.cs
- ImageButton.cs
- sitestring.cs
- TimeSpan.cs
- MasterPageCodeDomTreeGenerator.cs
- ValidatedMobileControlConverter.cs
- HierarchicalDataBoundControlAdapter.cs
- SchemaElement.cs
- DataViewSetting.cs
- AutoGeneratedFieldProperties.cs
- DataGridViewControlCollection.cs
- RoutingService.cs
- Registry.cs
- ListItemCollection.cs
- RuleInfoComparer.cs
- TraceLog.cs
- ConfigurationSectionGroupCollection.cs
- SpecularMaterial.cs
- ParameterModifier.cs
- Label.cs
- ApplicationSettingsBase.cs
- WindowAutomationPeer.cs
- panel.cs
- RegexCompilationInfo.cs
- PropertyRecord.cs
- SafeFileHandle.cs
- PermissionSetTriple.cs
- FastPropertyAccessor.cs
- WebPartManagerInternals.cs
- TransformPattern.cs
- UrlPath.cs
- MasterPage.cs
- QilVisitor.cs
- PerformanceCountersElement.cs
- XmlResolver.cs
- DataGridState.cs
- EditorPartCollection.cs
- XmlSchemaObjectCollection.cs
- SqlReorderer.cs
- safex509handles.cs
- TypeElementCollection.cs
- GridView.cs
- HttpPostProtocolReflector.cs
- Tag.cs
- _ShellExpression.cs
- Propagator.JoinPropagator.JoinPredicateVisitor.cs
- SizeConverter.cs
- ZipFileInfo.cs
- ZoneLinkButton.cs
- PeerObject.cs
- RawStylusInputCustomData.cs
- ConfigurationStrings.cs
- XmlHierarchicalEnumerable.cs
- QueryCursorEventArgs.cs
- VisualStyleElement.cs
- JsonStringDataContract.cs
- BasePattern.cs
- PageEventArgs.cs
- X509InitiatorCertificateClientElement.cs
- FileSystemEnumerable.cs
- xmlsaver.cs
- Interlocked.cs
- _ServiceNameStore.cs
- AssociationEndMember.cs
- CheckBox.cs
- DataGridViewTopLeftHeaderCell.cs
- TextProviderWrapper.cs
- RtfControlWordInfo.cs
- FreeFormDragDropManager.cs
- ICspAsymmetricAlgorithm.cs