MultiplexingDispatchMessageFormatter.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx35 / System.ServiceModel.Web / System / ServiceModel / Dispatcher / MultiplexingDispatchMessageFormatter.cs / 1305376 / MultiplexingDispatchMessageFormatter.cs

                            //------------------------------------------------------------ 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//-----------------------------------------------------------

namespace System.ServiceModel.Dispatcher 
{
    using System; 
    using System.Collections.Generic; 
    using System.Net.Mime;
    using System.Runtime; 
    using System.ServiceModel;
    using System.ServiceModel.Channels;
    using System.ServiceModel.Description;
    using System.ServiceModel.Web; 

    class MultiplexingDispatchMessageFormatter : IDispatchMessageFormatter 
    { 
        Dictionary formatters;
        WebMessageFormat defaultFormat; 
        Dictionary defaultContentTypes;

        public WebMessageFormat DefaultFormat
        { 
            get { return this.defaultFormat; }
        } 
 
        public Dictionary DefaultContentTypes
        { 
            get
            {
                return this.defaultContentTypes;
            } 
        }
 
        public MultiplexingDispatchMessageFormatter(Dictionary formatters, WebMessageFormat defaultFormat) 
        {
            if (formatters == null) 
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("formatters");
            }
            this.formatters = formatters; 
            this.defaultFormat = defaultFormat;
            this.defaultContentTypes = new Dictionary(); 
            Fx.Assert(this.formatters.ContainsKey(this.defaultFormat), "The default format should always be included in the dictionary of formatters."); 
        }
 
        public void DeserializeRequest(Message message, object[] parameters)
        {
            throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException(SR2.GetString(SR2.SerializingRequestNotSupportedByFormatter, this)));
        } 

        public Message SerializeReply(MessageVersion messageVersion, object[] parameters, object result) 
        { 
            OutgoingWebResponseContext outgoingResponse = WebOperationContext.Current.OutgoingResponse;
            WebMessageFormat? nullableFormat = outgoingResponse.Format; 
            WebMessageFormat format = nullableFormat ?? this.defaultFormat;
            if (!this.formatters.ContainsKey(format))
            {
                string operationName = ""; 
                MessageProperties messageProperties = OperationContext.Current.IncomingMessageProperties;
                if (messageProperties.ContainsKey(WebHttpDispatchOperationSelector.HttpOperationNamePropertyName)) 
                { 
                    operationName = messageProperties[WebHttpDispatchOperationSelector.HttpOperationNamePropertyName] as string;
                } 
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException(SR2.GetString(SR2.OperationDoesNotSupportFormat, operationName, format.ToString())));
            }

            if (string.IsNullOrEmpty(outgoingResponse.ContentType)) 
            {
                string automatedSelectionContentType = outgoingResponse.AutomatedFormatSelectionContentType; 
                if (!string.IsNullOrEmpty(automatedSelectionContentType)) 
                {
                    // Don't set the content-type if it is default xml for backwards compatiabilty 
                    if (!string.Equals(automatedSelectionContentType, defaultContentTypes[WebMessageFormat.Xml], StringComparison.OrdinalIgnoreCase))
                    {
                        outgoingResponse.ContentType = automatedSelectionContentType;
                    } 
                }
                else 
                { 
                    // Don't set the content-type if it is default xml for backwards compatiabilty
                    if (format != WebMessageFormat.Xml) 
                    {
                        outgoingResponse.ContentType = defaultContentTypes[format];
                    }
                } 
            }
 
            Message message = this.formatters[format].SerializeReply(messageVersion, parameters, result); 

            return message; 
        }

        public bool SupportsMessageFormat(WebMessageFormat format)
        { 
            return this.formatters.ContainsKey(format);
        } 
    } 
}
 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK