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
- OperationAbortedException.cs
- DynamicField.cs
- IconHelper.cs
- CodeNamespaceImport.cs
- EventHandlersStore.cs
- XomlCompilerResults.cs
- RSACryptoServiceProvider.cs
- ObjectSerializerFactory.cs
- XmlNode.cs
- HashMembershipCondition.cs
- ToolStripItemClickedEventArgs.cs
- XamlTypeMapper.cs
- ValidationPropertyAttribute.cs
- ShaderEffect.cs
- WebBrowserNavigatingEventHandler.cs
- SessionStateItemCollection.cs
- PropertyGeneratedEventArgs.cs
- PrintSchema.cs
- XmlDataSourceNodeDescriptor.cs
- Attributes.cs
- XmlEntity.cs
- EventDescriptor.cs
- DisableDpiAwarenessAttribute.cs
- MimeFormReflector.cs
- TargetConverter.cs
- DataGridItemCollection.cs
- LiteralControl.cs
- TreeViewDesigner.cs
- CollectionEditVerbManager.cs
- _DigestClient.cs
- SyncOperationState.cs
- XmlCharCheckingWriter.cs
- DefinitionUpdate.cs
- CompiledXpathExpr.cs
- ChildrenQuery.cs
- Dispatcher.cs
- SynchronousChannel.cs
- TextSerializer.cs
- KeyConverter.cs
- CodeAttributeDeclaration.cs
- DynamicUpdateCommand.cs
- SnapshotChangeTrackingStrategy.cs
- DetailsViewUpdateEventArgs.cs
- ShellProvider.cs
- MapPathBasedVirtualPathProvider.cs
- KoreanLunisolarCalendar.cs
- Thickness.cs
- isolationinterop.cs
- BaseResourcesBuildProvider.cs
- Axis.cs
- Matrix3DValueSerializer.cs
- dataobject.cs
- ActivityTypeResolver.xaml.cs
- CompilerParameters.cs
- DomainConstraint.cs
- XpsSerializationException.cs
- ToolStripRendererSwitcher.cs
- FlowDocumentPaginator.cs
- SessionStateItemCollection.cs
- ExpressionBindingCollection.cs
- RadioButtonRenderer.cs
- CodeBlockBuilder.cs
- MimeBasePart.cs
- ItemList.cs
- DSASignatureFormatter.cs
- BrowserCapabilitiesFactoryBase.cs
- BatchStream.cs
- Policy.cs
- StyleXamlParser.cs
- Visual3D.cs
- AppDomainShutdownMonitor.cs
- WebPartUserCapability.cs
- BinaryObjectReader.cs
- FrameworkElementFactoryMarkupObject.cs
- DateTimePickerDesigner.cs
- DriveNotFoundException.cs
- AnimationException.cs
- HtmlWindowCollection.cs
- SigningProgress.cs
- IndexOutOfRangeException.cs
- NumericPagerField.cs
- Rfc2898DeriveBytes.cs
- Tracking.cs
- Comparer.cs
- CategoryAttribute.cs
- DBNull.cs
- DynamicMethod.cs
- RequestCachePolicyConverter.cs
- XmlTextEncoder.cs
- NativeMethods.cs
- BindingExpression.cs
- DeferredElementTreeState.cs
- XmlNotation.cs
- TemplatedMailWebEventProvider.cs
- HwndSource.cs
- OleStrCAMarshaler.cs
- DataGridViewHitTestInfo.cs
- OptimalBreakSession.cs
- ReflectionServiceProvider.cs
- ToolStripPanelSelectionGlyph.cs