HttpStreamFormatter.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 / HttpStreamFormatter.cs / 1305376 / HttpStreamFormatter.cs

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

#pragma warning disable 1634 // Stops compiler from warning about unknown warnings (for Presharp) 

namespace System.ServiceModel.Dispatcher 
{ 
    using System;
    using System.ServiceModel; 
    using System.ServiceModel.Channels;
    using System.ServiceModel.Description;
    using System.Collections.Generic;
    using System.Xml; 
    using System.Runtime.Serialization;
    using DiagnosticUtility = System.ServiceModel.DiagnosticUtility; 
    using System.IO; 
    using System.Collections.Specialized;
    using System.Net; 

    class HttpStreamFormatter : IDispatchMessageFormatter, IClientMessageFormatter
    {
        string contractName; 
        string contractNs;
        string operationName; 
 
        public HttpStreamFormatter(OperationDescription operation)
        { 
            if (operation == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("operation");
            } 
            this.operationName = operation.Name;
            this.contractName = operation.DeclaringContract.Name; 
            this.contractNs = operation.DeclaringContract.Namespace; 
        }
 
        public object DeserializeReply(Message message, object[] parameters)
        {
            return GetStreamFromMessage(message, false);
        } 

        public void DeserializeRequest(Message message, object[] parameters) 
        { 
            parameters[0] = GetStreamFromMessage(message, true);
        } 

        public Message SerializeReply(MessageVersion messageVersion, object[] parameters, object result)
        {
            Message message = CreateMessageFromStream(result); 
            if (result == null)
            { 
                SingleBodyParameterMessageFormatter.SuppressReplyEntityBody(message); 
            }
            return message; 
        }

        public Message SerializeRequest(MessageVersion messageVersion, object[] parameters)
        { 
            Message message = CreateMessageFromStream(parameters[0]);
            if (parameters[0] == null) 
            { 
                SingleBodyParameterMessageFormatter.SuppressRequestEntityBody(message);
            } 
            return message;
        }

        internal static bool IsEmptyMessage(Message message) 
        {
            return message.IsEmpty; 
        } 

        Message CreateMessageFromStream(object data) 
        {
            Message result;
            if (data == null)
            { 
                result = Message.CreateMessage(MessageVersion.None, (string) null);
            } 
            else 
            {
                Stream streamData = data as Stream; 
                if (streamData == null)
                {
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR2.GetString(SR2.ParameterIsNotStreamType, data.GetType(), this.operationName, this.contractName, this.contractNs)));
                } 
                result = new HttpStreamMessage(streamData);
                result.Properties[WebBodyFormatMessageProperty.Name] = WebBodyFormatMessageProperty.RawProperty; 
            } 
            return result;
        } 

        Stream GetStreamFromMessage(Message message, bool isRequest)
        {
            object prop; 
            message.Properties.TryGetValue(WebBodyFormatMessageProperty.Name, out prop);
            WebBodyFormatMessageProperty formatProperty = (prop as WebBodyFormatMessageProperty); 
            if (formatProperty == null) 
            {
                // GET and DELETE do not go through the encoder 
                if (IsEmptyMessage(message))
                {
                    return new MemoryStream();
                } 
                else
                { 
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperWarning(new InvalidOperationException(SR2.GetString(SR2.MessageFormatPropertyNotFound, this.operationName, this.contractName, this.contractNs))); 
                }
            } 
            if (formatProperty.Format != WebContentFormat.Raw)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperWarning(new InvalidOperationException(SR2.GetString(SR2.InvalidHttpMessageFormat, this.operationName, this.contractName, this.contractNs, formatProperty.Format, WebContentFormat.Raw)));
            } 
            return new StreamFormatter.MessageBodyStream(message, null, null, HttpStreamMessage.StreamElementName, string.Empty, isRequest);
        } 
    } 
}
 

// 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