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
- ToolStripContentPanel.cs
- MediaPlayer.cs
- SourceSwitch.cs
- safePerfProviderHandle.cs
- HostedElements.cs
- RelationshipWrapper.cs
- TemplatePropertyEntry.cs
- PartialArray.cs
- NumericPagerField.cs
- FileSystemWatcher.cs
- GradientBrush.cs
- TypeUtil.cs
- XmlSchemaComplexContentRestriction.cs
- XmlIncludeAttribute.cs
- documentation.cs
- AmbiguousMatchException.cs
- FormsAuthenticationUserCollection.cs
- CaseExpr.cs
- BrushConverter.cs
- CryptoConfig.cs
- AmbientLight.cs
- DirtyTextRange.cs
- SmiEventSink.cs
- ArrayExtension.cs
- ToggleButtonAutomationPeer.cs
- WindowsScrollBarBits.cs
- SpanIndex.cs
- LoginUtil.cs
- DisplayNameAttribute.cs
- SiteMapDataSourceView.cs
- CodeObjectCreateExpression.cs
- DocumentsTrace.cs
- SerializationInfo.cs
- TextPattern.cs
- VoiceObjectToken.cs
- ProviderException.cs
- DataPagerCommandEventArgs.cs
- Authorization.cs
- ProxyWebPartManagerDesigner.cs
- PolyQuadraticBezierSegment.cs
- ContextMenuStripActionList.cs
- InstanceDataCollection.cs
- AlphabeticalEnumConverter.cs
- Error.cs
- WeakReference.cs
- InstanceDescriptor.cs
- GenericRootAutomationPeer.cs
- XmlElementAttributes.cs
- TTSEvent.cs
- ImageButton.cs
- ConsumerConnectionPointCollection.cs
- SamlDelegatingWriter.cs
- Expressions.cs
- CheckBox.cs
- BindValidationContext.cs
- ReadOnlyCollectionBuilder.cs
- SequenceNumber.cs
- HtmlInputHidden.cs
- OrderedDictionary.cs
- CopyNodeSetAction.cs
- autovalidator.cs
- IOThreadScheduler.cs
- NetworkInformationPermission.cs
- validation.cs
- AppearanceEditorPart.cs
- SolidColorBrush.cs
- VisualBasicReference.cs
- QuadraticEase.cs
- AssociationEndMember.cs
- EmptyStringExpandableObjectConverter.cs
- TraceContextEventArgs.cs
- CodeDefaultValueExpression.cs
- AlternationConverter.cs
- KnownBoxes.cs
- embossbitmapeffect.cs
- ApplicationTrust.cs
- StringConverter.cs
- EmptyQuery.cs
- SystemColors.cs
- AnnotationObservableCollection.cs
- StringExpressionSet.cs
- IgnoreFileBuildProvider.cs
- SimpleFieldTemplateFactory.cs
- dbenumerator.cs
- PerfService.cs
- FrameDimension.cs
- FrameworkObject.cs
- CqlParser.cs
- RelationshipEndMember.cs
- FloaterParagraph.cs
- EditorReuseAttribute.cs
- ProfileSettings.cs
- GeneralTransform2DTo3DTo2D.cs
- TokenizerHelper.cs
- EditorPart.cs
- FieldNameLookup.cs
- FieldNameLookup.cs
- TraceXPathNavigator.cs
- CustomAttributeBuilder.cs
- TextTreeDeleteContentUndoUnit.cs