BatchWriter.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 / fx / src / DataWeb / Server / System / Data / Services / Serializers / BatchWriter.cs / 1305376 / BatchWriter.cs

                            //---------------------------------------------------------------------- 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//  
//      Provides a base class for DataWeb services.
//  
// 
// @owner  [....]
//--------------------------------------------------------------------- 

namespace System.Data.Services.Serializers
{
    #region Namespaces. 

    using System; 
    using System.Collections.Generic; 
    using System.Diagnostics;
    using System.IO; 

    #endregion Namespaces.

    ///  
    /// Static helper class to write responses for batch requests
    ///  
    internal static class BatchWriter 
    {
        ///  
        /// Writes the start of the changeset response
        /// 
        /// writer to which the response needs to be written
        /// batch boundary 
        /// changeset boundary
        internal static void WriteStartBatchBoundary(StreamWriter writer, string batchBoundary, string changesetBoundary) 
        { 
            WriterStartBoundary(writer, batchBoundary);
            writer.WriteLine( 
                "{0}: {1}; {2}={3}",
                XmlConstants.HttpContentType,
                XmlConstants.MimeMultiPartMixed,
                XmlConstants.HttpMultipartBoundary, 
                changesetBoundary);
            writer.WriteLine(); // NewLine to seperate the header from message 
        } 

        /// Write the boundary and header information. 
        /// writer to which the response needs to be written
        /// host containing the value of the response headers
        /// content-id string that needs to be written
        /// boundary string that needs to be written 
        internal static void WriteBoundaryAndHeaders(StreamWriter writer, IDataServiceHost2 host, string contentId, string boundary)
        { 
            Debug.Assert(writer != null, "writer != null"); 
            Debug.Assert(host != null, "host != null");
            Debug.Assert(boundary != null, "boundary != null"); 
            WriterStartBoundary(writer, boundary);

            // First write the headers to indicate that the payload below is a http request
            WriteHeaderValue(writer, XmlConstants.HttpContentType, XmlConstants.MimeApplicationHttp); 
            WriteHeaderValue(writer, XmlConstants.HttpContentTransferEncoding, XmlConstants.BatchRequestContentTransferEncoding);
            writer.WriteLine(); // NewLine to seperate the batch headers from http headers 
 
            // In error cases, we create a dummy host, which has no request header information.
            // Hence we need to handle the case here. 
            writer.WriteLine("{0} {1} {2}", XmlConstants.HttpVersionInBatching, host.ResponseStatusCode, WebUtil.GetStatusCodeText(host.ResponseStatusCode));

            if (null != contentId)
            { 
                WriteHeaderValue(writer, XmlConstants.HttpContentID, contentId);
            } 
 
            System.Net.WebHeaderCollection responseHeaders = host.ResponseHeaders;
            foreach (string header in responseHeaders.AllKeys) 
            {
                WriteHeaderValue(writer, header, responseHeaders[header]);
            }
 
            writer.WriteLine(); // NewLine to seperate the header from message
        } 
 
        /// 
        /// Write the end boundary 
        /// 
        /// writer to which the response needs to be written
        /// end boundary string.
        internal static void WriteEndBoundary(StreamWriter writer, string boundary) 
        {
            writer.WriteLine("--{0}--", boundary); 
        } 

        ///  
        /// Write the start boundary
        /// 
        /// writer to which the response needs to be written
        /// boundary string. 
        private static void WriterStartBoundary(StreamWriter writer, string boundary)
        { 
            writer.WriteLine("--{0}", boundary); 
        }
 
        /// 
        /// Write the header name and value
        /// 
        /// writer to which the response needs to be written 
        /// name of the header whose value needs to be written.
        /// value of the header that needs to be written. 
        private static void WriteHeaderValue(StreamWriter writer, string headerName, object headerValue) 
        {
            if (headerValue != null) 
            {
                string text = Convert.ToString(headerValue, System.Globalization.CultureInfo.InvariantCulture);
                if (!String.IsNullOrEmpty(text))
                { 
                    writer.WriteLine("{0}: {1}", headerName, text);
                } 
            } 
        }
    } 
}

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