Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Description / TypedMessageConverter.cs / 1 / TypedMessageConverter.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Description { using System; using System.ServiceModel.Channels; using System.ServiceModel.Dispatcher; using System.ServiceModel; using System.Runtime.Serialization; using System.Collections; using System.Diagnostics; public abstract class TypedMessageConverter { public static TypedMessageConverter Create(Type messageContract, string action) { return Create(messageContract, action, null, TypeLoader.DefaultDataContractFormatAttribute); } public static TypedMessageConverter Create(Type messageContract, string action, string defaultNamespace) { return Create(messageContract, action, defaultNamespace, TypeLoader.DefaultDataContractFormatAttribute); } public static TypedMessageConverter Create(Type messageContract, string action, XmlSerializerFormatAttribute formatterAttribute) { return Create(messageContract, action, null, formatterAttribute); } public static TypedMessageConverter Create(Type messageContract, string action, DataContractFormatAttribute formatterAttribute) { return Create(messageContract, action, null, formatterAttribute); } public static TypedMessageConverter Create(Type messageContract, String action, String defaultNamespace, XmlSerializerFormatAttribute formatterAttribute) { if (messageContract == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("messageContract")); if (defaultNamespace == null) defaultNamespace = NamingHelper.DefaultNamespace; return new XmlMessageConverter(GetOperationFormatter(messageContract, formatterAttribute, defaultNamespace, action)); } public static TypedMessageConverter Create(Type messageContract, String action, String defaultNamespace, DataContractFormatAttribute formatterAttribute) { if (messageContract == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("messageContract")); if (!messageContract.IsDefined(typeof(MessageContractAttribute), false)) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR.GetString(SR.SFxMessageContractAttributeRequired, messageContract), "messageContract")); if (defaultNamespace == null) defaultNamespace = NamingHelper.DefaultNamespace; return new XmlMessageConverter(GetOperationFormatter(messageContract, formatterAttribute, defaultNamespace, action)); } public abstract Message ToMessage(Object typedMessage); public abstract Message ToMessage(Object typedMessage, MessageVersion version); public abstract Object FromMessage(Message message); static OperationFormatter GetOperationFormatter(Type t, Attribute formatAttribute, string defaultNS, string action) { bool isXmlSerializer = (formatAttribute is XmlSerializerFormatAttribute); TypeLoader typeLoader = new TypeLoader(); MessageDescription message = typeLoader.CreateTypedMessageDescription(t, null, null, defaultNS, action, MessageDirection.Output); ContractDescription contract = new ContractDescription("dummy_contract", defaultNS); OperationDescription operation = new OperationDescription(NamingHelper.XmlName(t.Name), contract, false); operation.Messages.Add(message); if (isXmlSerializer) return XmlSerializerOperationBehavior.CreateOperationFormatter(operation, (XmlSerializerFormatAttribute)formatAttribute); else return new DataContractSerializerOperationFormatter(operation, (DataContractFormatAttribute)formatAttribute, null); } } internal class XmlMessageConverter : TypedMessageConverter { OperationFormatter formatter; internal XmlMessageConverter(OperationFormatter formatter) { this.formatter = formatter; } internal string Action { get { return formatter.RequestAction; } } public override Message ToMessage(Object typedMessage) { return ToMessage(typedMessage, MessageVersion.Soap12WSAddressing10); } public override Message ToMessage(Object typedMessage, MessageVersion version) { if (typedMessage == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("typedMessage")); return formatter.SerializeRequest(version, new object[] { typedMessage }); } public override Object FromMessage(Message message) { DiagnosticUtility.DebugAssert(message.Headers != null, ""); if (this.Action != null && message.Headers.Action != null && message.Headers.Action != this.Action) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.SFxActionMismatch, this.Action, message.Headers.Action))); object[] result = new object[1]; formatter.DeserializeRequest(message, result); return result[0]; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- InvalidWMPVersionException.cs
- ComponentDispatcherThread.cs
- CompressedStack.cs
- DataControlFieldCollection.cs
- Int32RectValueSerializer.cs
- login.cs
- Axis.cs
- BlockUIContainer.cs
- SqlDataSourceWizardForm.cs
- LinkedResourceCollection.cs
- PixelFormats.cs
- PermissionSetEnumerator.cs
- printdlgexmarshaler.cs
- OperationCanceledException.cs
- XmlSchemaInfo.cs
- oledbmetadatacolumnnames.cs
- Parsers.cs
- IFlowDocumentViewer.cs
- XmlTextEncoder.cs
- WebPartExportVerb.cs
- Claim.cs
- GridViewColumn.cs
- ByteAnimationUsingKeyFrames.cs
- ButtonBase.cs
- VectorCollectionValueSerializer.cs
- GetResponse.cs
- ElementHost.cs
- DataIdProcessor.cs
- MorphHelper.cs
- ProfileGroupSettingsCollection.cs
- HttpWriter.cs
- RangeBase.cs
- TreeViewImageIndexConverter.cs
- TreeNodeSelectionProcessor.cs
- ContentControl.cs
- ContentPathSegment.cs
- WhiteSpaceTrimStringConverter.cs
- Evaluator.cs
- DateBoldEvent.cs
- Int64AnimationUsingKeyFrames.cs
- AsymmetricSecurityProtocol.cs
- PropVariant.cs
- EdmProperty.cs
- DiffuseMaterial.cs
- EventLogPermissionAttribute.cs
- PackWebRequestFactory.cs
- SQLChars.cs
- NetworkInterface.cs
- EventSinkHelperWriter.cs
- SqlDataSourceCustomCommandEditor.cs
- SoapObjectReader.cs
- recordstatescratchpad.cs
- WindowPatternIdentifiers.cs
- OuterGlowBitmapEffect.cs
- CodeArrayIndexerExpression.cs
- Lasso.cs
- DataList.cs
- EntityDataSourceViewSchema.cs
- DataControlImageButton.cs
- DoubleLink.cs
- XPathBinder.cs
- TypeConverterMarkupExtension.cs
- Timer.cs
- ToolStripRenderer.cs
- HttpSessionStateWrapper.cs
- webeventbuffer.cs
- ConfigurationStrings.cs
- xmlglyphRunInfo.cs
- TemplateLookupAction.cs
- ByteStorage.cs
- SystemBrushes.cs
- ColumnHeaderConverter.cs
- CannotUnloadAppDomainException.cs
- StatusBar.cs
- XmlSchemaDocumentation.cs
- XPathNode.cs
- AlignmentXValidation.cs
- NetworkInformationException.cs
- ListItemCollection.cs
- PlatformCulture.cs
- XPathBinder.cs
- WebHttpElement.cs
- DeviceContext2.cs
- GridItemCollection.cs
- PackageFilter.cs
- Propagator.ExtentPlaceholderCreator.cs
- X509ChainPolicy.cs
- PartitionedDataSource.cs
- QilInvokeEarlyBound.cs
- TransactedBatchingBehavior.cs
- StylusPointPropertyInfo.cs
- XmlCharCheckingWriter.cs
- HtmlInputHidden.cs
- AutomationIdentifier.cs
- TargetInvocationException.cs
- CookieHandler.cs
- EventArgs.cs
- TagPrefixCollection.cs
- CreateUserWizard.cs
- DocumentXPathNavigator.cs