Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.ServiceModel.Activities / System / ServiceModel / Activities / ReceiveMessageContent.cs / 1305376 / ReceiveMessageContent.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.ServiceModel.Activities { using System.Activities; using System.ComponentModel; using System.Runtime; using System.ServiceModel.Channels; using System.ServiceModel.Description; using System.Windows.Markup; [ContentProperty("Message")] public sealed class ReceiveMessageContent : ReceiveContent { public ReceiveMessageContent() : base() { } public ReceiveMessageContent(OutArgument message) : this() { this.Message = message; } public ReceiveMessageContent(OutArgument message, Type declaredMessageType) : this(message) { this.DeclaredMessageType = declaredMessageType; } // The value that is received as the body of the message. // The type is derived from Message.Expression.ResultType. If the optional // DeclaredMessageType property is also specified, it is validated against // Message.Expression.ResultType. [DefaultValue(null)] public OutArgument Message { get; set; } // Allows the type of the variable specified for Message to be a derived type from the type // on the message contract. This type specifies what the type is one the message contract. // If DeclaredMessageType is not specified, the type from the Message OutArgument is used. // The DeclaredMessageType must either be the same as the type of the OutArgument Message, // or it must be a base type of Message. [DefaultValue(null)] public Type DeclaredMessageType { get; set; } internal Type InternalDeclaredMessageType { get { if (this.DeclaredMessageType == null && this.Message != null) { return this.Message.ArgumentType; } else { return this.DeclaredMessageType; } } } [EditorBrowsable(EditorBrowsableState.Never)] public bool ShouldSerializeDeclaredMessageType() { // don't serialize null if (this.DeclaredMessageType == null) { return false; } // if the expression type of Message matches the declared message type, no need to serialize duplicative information if (this.Message != null && this.DeclaredMessageType == this.Message.ArgumentType) { return false; } return true; } internal override void CacheMetadata(ActivityMetadata metadata, Activity owner, string operationName) { MessagingActivityHelper.FixMessageArgument(this.Message, ArgumentDirection.Out, metadata); if (this.DeclaredMessageType != null) { if (this.Message == null && this.DeclaredMessageType != TypeHelper.VoidType) { string errorOperationName = ContractValidationHelper.GetErrorMessageOperationName(operationName); metadata.AddValidationError(SR.ValueCannotBeNull(owner.DisplayName, errorOperationName)); } else if (this.Message != null && !this.DeclaredMessageType.IsAssignableFrom(this.Message.ArgumentType)) { string errorOperationName = ContractValidationHelper.GetErrorMessageOperationName(operationName); metadata.AddValidationError(SR.ValueArgumentTypeNotDerivedFromValueType(owner.DisplayName, errorOperationName)); } } } internal override void ConfigureInternalReceive(InternalReceiveMessage internalReceiveMessage, out FromRequest requestFormatter) { if (this.InternalDeclaredMessageType == MessageDescription.TypeOfUntypedMessage) { internalReceiveMessage.Message = new OutArgument(context => ((OutArgument )this.Message).Get(context)); requestFormatter = null; } else { requestFormatter = new FromRequest(); if (this.Message != null) { requestFormatter.Parameters.Add(OutArgument.CreateReference(this.Message, "Message")); } } } internal override void ConfigureInternalReceiveReply(InternalReceiveMessage internalReceiveMessage, out FromReply responseFormatter) { if (this.InternalDeclaredMessageType == MessageDescription.TypeOfUntypedMessage) { // do not use the formatter in this case internalReceiveMessage.Message = new OutArgument (context => ((OutArgument )this.Message).Get(context)); responseFormatter = null; } else { responseFormatter = new FromReply(); // WCF rule dictates that MessageContract must be bound to ReturnValue, not Parameters if (MessageBuilder.IsMessageContract(this.InternalDeclaredMessageType)) { responseFormatter.Result = OutArgument.CreateReference(this.Message, "Message"); } else if (this.Message != null) { responseFormatter.Parameters.Add(OutArgument.CreateReference(this.Message, "Message")); } } } internal override void InferMessageDescription(OperationDescription operation, object owner, MessageDirection direction) { ContractInferenceHelper.CheckForDisposableParameters(operation, this.InternalDeclaredMessageType); string overridingAction = null; SerializerOption serializerOption = SerializerOption.DataContractSerializer; Receive receive = owner as Receive; if (receive != null) { overridingAction = receive.Action; serializerOption = receive.SerializerOption; } else { ReceiveReply receiveReply = owner as ReceiveReply; Fx.Assert(receiveReply != null, "The owner of ReceiveMessageContent can only be Receive or ReceiveReply!"); overridingAction = receiveReply.Action; serializerOption = receiveReply.Request.SerializerOption; } if (direction == MessageDirection.Input) { ContractInferenceHelper.AddInputMessage(operation, overridingAction, this.InternalDeclaredMessageType, serializerOption); } else { ContractInferenceHelper.AddOutputMessage(operation, overridingAction, this.InternalDeclaredMessageType, serializerOption); } } } } // 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
- SqlClientWrapperSmiStreamChars.cs
- CfgParser.cs
- Rijndael.cs
- ProofTokenCryptoHandle.cs
- WmlFormAdapter.cs
- FramingChannels.cs
- DesignerSerializationOptionsAttribute.cs
- PlatformCulture.cs
- dbenumerator.cs
- WinFormsSecurity.cs
- GridViewEditEventArgs.cs
- Speller.cs
- SystemInformation.cs
- DictionaryEntry.cs
- CaseKeyBox.ViewModel.cs
- OleDbConnectionInternal.cs
- XamlInt32CollectionSerializer.cs
- WebBrowserHelper.cs
- SymbolType.cs
- BuildProvider.cs
- MultiByteCodec.cs
- ProxyElement.cs
- URLMembershipCondition.cs
- TextHidden.cs
- SaveWorkflowCommand.cs
- filewebresponse.cs
- WorkflowElementDialog.cs
- PeerToPeerException.cs
- TextElementCollection.cs
- DataSourceXmlClassAttribute.cs
- RequestChannel.cs
- InternalConfigEventArgs.cs
- XamlReaderHelper.cs
- InplaceBitmapMetadataWriter.cs
- InkCanvas.cs
- TableLayout.cs
- TextFormatterContext.cs
- PerfProviderCollection.cs
- HideDisabledControlAdapter.cs
- UxThemeWrapper.cs
- Size.cs
- UncommonField.cs
- ClientApiGenerator.cs
- XPathEmptyIterator.cs
- NavigationPropertySingletonExpression.cs
- StringFreezingAttribute.cs
- SettingsPropertyWrongTypeException.cs
- SHA384Managed.cs
- AuthenticationSection.cs
- PartialClassGenerationTask.cs
- StylusShape.cs
- OrderedDictionary.cs
- WebPartRestoreVerb.cs
- SiteMapHierarchicalDataSourceView.cs
- EntityDataSourceContextCreatingEventArgs.cs
- TextBox.cs
- HiddenFieldPageStatePersister.cs
- FlowSwitchLink.cs
- BaseValidator.cs
- PreviewPageInfo.cs
- Triangle.cs
- ZipArchive.cs
- Attributes.cs
- MultiPageTextView.cs
- GenericUriParser.cs
- Baml2006Reader.cs
- InvalidComObjectException.cs
- SchemaDeclBase.cs
- MulticastDelegate.cs
- HashAlgorithm.cs
- XmlSchemaExternal.cs
- PerformanceCounterPermission.cs
- StaticExtensionConverter.cs
- GradientPanel.cs
- DecoderBestFitFallback.cs
- EncryptedXml.cs
- ProviderBase.cs
- SmiGettersStream.cs
- RequestBringIntoViewEventArgs.cs
- Operator.cs
- TraceXPathNavigator.cs
- ToolStripOverflow.cs
- ObjectNotFoundException.cs
- ToolStripItemRenderEventArgs.cs
- TaskExceptionHolder.cs
- DataGridColumnCollection.cs
- CopyNodeSetAction.cs
- UpDownEvent.cs
- NativeCompoundFileAPIs.cs
- FlowPosition.cs
- OperandQuery.cs
- Membership.cs
- GenericIdentity.cs
- UnionCqlBlock.cs
- ObjectQuery_EntitySqlExtensions.cs
- FontUnit.cs
- SapiRecognizer.cs
- DataGridViewCellStateChangedEventArgs.cs
- ExecutionEngineException.cs
- RepeatBehaviorConverter.cs