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
- Comparer.cs
- DataGridCell.cs
- MethodSignatureGenerator.cs
- HandledMouseEvent.cs
- BrowserDefinition.cs
- TypedRowHandler.cs
- SecurityException.cs
- ComponentEditorForm.cs
- lengthconverter.cs
- InfiniteTimeSpanConverter.cs
- EntityContainerEntitySetDefiningQuery.cs
- XsltOutput.cs
- WinEventTracker.cs
- RegisteredHiddenField.cs
- TextTrailingWordEllipsis.cs
- RoutedEventArgs.cs
- ASCIIEncoding.cs
- SimpleWebHandlerParser.cs
- QuaternionConverter.cs
- CompilerWrapper.cs
- SafeRightsManagementSessionHandle.cs
- WorkflowFileItem.cs
- CurrentChangingEventManager.cs
- baseaxisquery.cs
- CodeAttachEventStatement.cs
- StorageEntityContainerMapping.cs
- ToolTip.cs
- WebPageTraceListener.cs
- arc.cs
- AQNBuilder.cs
- SqlRecordBuffer.cs
- ClientSponsor.cs
- Vars.cs
- CodeSubDirectoriesCollection.cs
- AudioLevelUpdatedEventArgs.cs
- ListChangedEventArgs.cs
- ValidationEventArgs.cs
- DataGridViewAutoSizeModeEventArgs.cs
- CapabilitiesSection.cs
- XmlSerializableWriter.cs
- GcHandle.cs
- WebResourceAttribute.cs
- WebHttpSecurityElement.cs
- Annotation.cs
- Debugger.cs
- DivideByZeroException.cs
- OperandQuery.cs
- LogicalTreeHelper.cs
- Header.cs
- TransactionFlowProperty.cs
- WpfGeneratedKnownProperties.cs
- DocumentXmlWriter.cs
- Clipboard.cs
- XsltCompileContext.cs
- FormViewRow.cs
- PackWebRequest.cs
- ClickablePoint.cs
- ObjectStateEntryDbUpdatableDataRecord.cs
- altserialization.cs
- XPathChildIterator.cs
- DiscreteKeyFrames.cs
- DataServiceRequestOfT.cs
- WebPartDescriptionCollection.cs
- ToolStripItemTextRenderEventArgs.cs
- ConfigurationManagerInternalFactory.cs
- ComAdminWrapper.cs
- IdentityValidationException.cs
- SqlVisitor.cs
- DebuggerAttributes.cs
- oledbmetadatacollectionnames.cs
- RightsManagementErrorHandler.cs
- ParameterModifier.cs
- LookupBindingPropertiesAttribute.cs
- MouseWheelEventArgs.cs
- QilFunction.cs
- BindingContext.cs
- TransportBindingElementImporter.cs
- XmlSchemaRedefine.cs
- GridPattern.cs
- OleDbEnumerator.cs
- X509CertificateCollection.cs
- DataSourceControlBuilder.cs
- ToolBarButtonClickEvent.cs
- FigureHelper.cs
- XmlChildEnumerator.cs
- SingleSelectRootGridEntry.cs
- NavigationProperty.cs
- _BasicClient.cs
- DecimalSumAggregationOperator.cs
- SqlMethodCallConverter.cs
- BamlLocalizableResource.cs
- Module.cs
- DataGridViewHitTestInfo.cs
- CaseStatementSlot.cs
- MaterialCollection.cs
- GeometryDrawing.cs
- _FixedSizeReader.cs
- Color.cs
- CssTextWriter.cs
- LayoutManager.cs