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
- ModelItemCollectionImpl.cs
- TextViewElement.cs
- CultureMapper.cs
- DataSourceSerializationException.cs
- FastEncoderWindow.cs
- TextEditorSpelling.cs
- LayeredChannelListener.cs
- DetailsViewUpdateEventArgs.cs
- SecurityStandardsManager.cs
- BaseTemplateParser.cs
- MethodCallTranslator.cs
- SqlTypesSchemaImporter.cs
- DetailsViewDesigner.cs
- DrawingContextDrawingContextWalker.cs
- WindowsToolbar.cs
- ThemeInfoAttribute.cs
- MailBnfHelper.cs
- WebPartDisplayModeEventArgs.cs
- Attribute.cs
- AutomationPropertyInfo.cs
- GroupQuery.cs
- MutexSecurity.cs
- OleDbConnectionInternal.cs
- LocationUpdates.cs
- WizardForm.cs
- UidManager.cs
- DelimitedListTraceListener.cs
- CompilerInfo.cs
- DataBoundLiteralControl.cs
- ExceptionUtil.cs
- xml.cs
- LinqDataSourceStatusEventArgs.cs
- Property.cs
- BulletedList.cs
- ListParaClient.cs
- SerializationStore.cs
- VisualBrush.cs
- SerializationObjectManager.cs
- VBCodeProvider.cs
- TemplateParser.cs
- DateTimeValueSerializer.cs
- RecognizerInfo.cs
- XmlHierarchicalEnumerable.cs
- DictionaryEntry.cs
- DbSourceParameterCollection.cs
- DataGridViewAutoSizeModeEventArgs.cs
- ExternalCalls.cs
- FormViewDeletedEventArgs.cs
- ConfigurationManagerHelper.cs
- DataRelation.cs
- ProcessHost.cs
- infer.cs
- ClientSponsor.cs
- ExpressionsCollectionConverter.cs
- XD.cs
- MenuRendererStandards.cs
- IDReferencePropertyAttribute.cs
- UnsafeNativeMethods.cs
- NamespaceMapping.cs
- KeyTime.cs
- RuntimeHelpers.cs
- GAC.cs
- CodeEntryPointMethod.cs
- AppSettingsSection.cs
- SerTrace.cs
- RemoteArgument.cs
- CodeDomSerializerException.cs
- NullableDoubleAverageAggregationOperator.cs
- GlyphInfoList.cs
- AssemblyAttributes.cs
- Properties.cs
- SiteOfOriginPart.cs
- AlignmentYValidation.cs
- IdentityNotMappedException.cs
- ExpressionNormalizer.cs
- DbConvert.cs
- WindowsSecurityToken.cs
- DataGridViewColumn.cs
- PathNode.cs
- HostedTransportConfigurationBase.cs
- File.cs
- PipeSecurity.cs
- TextFormatterContext.cs
- InArgumentConverter.cs
- DataControlButton.cs
- SafeLocalMemHandle.cs
- PreservationFileWriter.cs
- ObjectHandle.cs
- DataGridView.cs
- WindowsUserNameCachingSecurityTokenAuthenticator.cs
- XmlElementList.cs
- GradientStop.cs
- DataGridViewControlCollection.cs
- GeneralTransform3D.cs
- TransformProviderWrapper.cs
- DataColumnMapping.cs
- NavigationHelper.cs
- InheritanceRules.cs
- ClientTargetCollection.cs
- Size.cs