Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.ServiceModel.Activities / System / ServiceModel / Activities / ReceiveParametersContent.cs / 1305376 / ReceiveParametersContent.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 ReceiveParametersContent : ReceiveContent
{
string[] argumentNames;
Type[] argumentTypes;
public ReceiveParametersContent()
: base()
{
this.Parameters = new OrderedDictionary();
}
public ReceiveParametersContent(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;
}
}
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.ReceiveParametersContentDoesNotSupportMessage(owner.DisplayName, argumentNames[index]));
}
index++;
}
if (!metadata.HasViolations)
{
foreach (KeyValuePair pair in this.Parameters)
{
RuntimeArgument newRuntimeArgument = new RuntimeArgument(pair.Key, pair.Value.ArgumentType, ArgumentDirection.Out);
metadata.Bind(pair.Value, newRuntimeArgument);
metadata.AddArgument(newRuntimeArgument);
}
}
}
internal override void ConfigureInternalReceive(InternalReceiveMessage internalReceiveMessage, out FromRequest requestFormatter)
{
requestFormatter = new FromRequest();
foreach (KeyValuePair parameter in this.Parameters)
{
requestFormatter.Parameters.Add(OutArgument.CreateReference(parameter.Value, parameter.Key));
}
}
internal override void ConfigureInternalReceiveReply(InternalReceiveMessage internalReceiveMessage, out FromReply responseFormatter)
{
responseFormatter = new FromReply();
foreach (KeyValuePair parameter in this.Parameters)
{
responseFormatter.Parameters.Add(OutArgument.CreateReference(parameter.Value, parameter.Key));
}
}
internal override void InferMessageDescription(OperationDescription operation, object owner, MessageDirection direction)
{
ContractInferenceHelper.CheckForDisposableParameters(operation, this.argumentTypes);
string overridingAction = owner is Receive ? ((Receive)owner).Action : ((ReceiveReply)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
- CompleteWizardStep.cs
- UrlPropertyAttribute.cs
- LifetimeServices.cs
- DataViewManagerListItemTypeDescriptor.cs
- Span.cs
- SecurityUtils.cs
- Line.cs
- Section.cs
- TimeSpan.cs
- QuaternionKeyFrameCollection.cs
- XmlSchemaInclude.cs
- FlowDocumentReaderAutomationPeer.cs
- DataAdapter.cs
- AppSettingsReader.cs
- SqlCacheDependency.cs
- CoTaskMemUnicodeSafeHandle.cs
- InstanceData.cs
- SkewTransform.cs
- TraceContext.cs
- WebPartPersonalization.cs
- GeometryModel3D.cs
- TextServicesPropertyRanges.cs
- TextBreakpoint.cs
- linebase.cs
- HealthMonitoringSectionHelper.cs
- SecUtil.cs
- Triangle.cs
- InvalidDataContractException.cs
- ExecutionEngineException.cs
- MsmqPoisonMessageException.cs
- ObjectHelper.cs
- ChannelManagerHelpers.cs
- XPathSelectionIterator.cs
- Unit.cs
- CodeGenerator.cs
- Marshal.cs
- ClickablePoint.cs
- PathSegment.cs
- TerminatingOperationBehavior.cs
- PropertyItemInternal.cs
- TypeReference.cs
- SecurityKeyIdentifierClause.cs
- SchemaTypeEmitter.cs
- DbExpressionVisitor_TResultType.cs
- ExtractorMetadata.cs
- SqlFactory.cs
- ParagraphResult.cs
- HttpCapabilitiesBase.cs
- ConstraintStruct.cs
- ListItemConverter.cs
- DataTableReaderListener.cs
- CodeSubDirectory.cs
- Wildcard.cs
- XPathBinder.cs
- DataReaderContainer.cs
- SQLInt16.cs
- PixelFormatConverter.cs
- ImageInfo.cs
- Decorator.cs
- TypeReference.cs
- MenuItemStyleCollectionEditor.cs
- ResourceCategoryAttribute.cs
- Positioning.cs
- BrowserDefinitionCollection.cs
- KeyTime.cs
- FontSource.cs
- ContainerControlDesigner.cs
- OleDbWrapper.cs
- BreakRecordTable.cs
- ping.cs
- ObjectPropertyMapping.cs
- DropTarget.cs
- ObjectDataSourceStatusEventArgs.cs
- XamlPoint3DCollectionSerializer.cs
- SocketInformation.cs
- assemblycache.cs
- XmlQueryRuntime.cs
- SegmentInfo.cs
- Separator.cs
- UnsafeNativeMethods.cs
- WorkflowApplicationUnhandledExceptionEventArgs.cs
- Part.cs
- XmlUnspecifiedAttribute.cs
- EntityKeyElement.cs
- TypeToken.cs
- FusionWrap.cs
- StickyNoteHelper.cs
- XPathNodeInfoAtom.cs
- DefaultAuthorizationContext.cs
- NetworkInformationPermission.cs
- TypedTableGenerator.cs
- RecognizerBase.cs
- AssemblyResourceLoader.cs
- ExtensionFile.cs
- Quad.cs
- Grid.cs
- FlagsAttribute.cs
- DirectoryNotFoundException.cs
- Clipboard.cs
- SafeCertificateContext.cs