WsatRegistrationHeader.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Transactions / WsatRegistrationHeader.cs / 1 / WsatRegistrationHeader.cs

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

namespace System.ServiceModel.Transactions 
{
    using System; 
    using System.ServiceModel.Channels; 
    using System.Diagnostics;
    using System.ServiceModel; 
    using System.Xml;

    using Microsoft.Transactions.Wsat.Messaging;
    using XD = System.ServiceModel.XD; 

    class WsatRegistrationHeader : AddressHeader 
    { 
        const string HeaderName = DotNetAtomicTransactionExternalStrings.RegisterInfo;
        const string HeaderNamespace = DotNetAtomicTransactionExternalStrings.Namespace; 

        Guid transactionId;
        string contextId;
        string tokenId; 

        public WsatRegistrationHeader(Guid transactionId, string contextId, string tokenId) 
        { 
            this.transactionId = transactionId;
            this.contextId = contextId; 
            this.tokenId = tokenId;
        }

        public override string Name 
        {
            get { return HeaderName; } 
        } 

        public override string Namespace 
        {
            get { return HeaderNamespace; }
        }
 
        public Guid TransactionId
        { 
            get { return this.transactionId; } 
        }
 
        public string ContextId
        {
            get { return this.contextId; }
        } 

        public string TokenId 
        { 
            get { return this.tokenId; }
        } 

        protected override void OnWriteStartAddressHeader (XmlDictionaryWriter writer)
        {
            writer.WriteStartElement(DotNetAtomicTransactionExternalStrings.Prefix, 
                                     XD.DotNetAtomicTransactionExternalDictionary.RegisterInfo,
                                     XD.DotNetAtomicTransactionExternalDictionary.Namespace); 
        } 

        protected override void OnWriteAddressHeaderContents (XmlDictionaryWriter writer) 
        {
            writer.WriteStartElement(XD.DotNetAtomicTransactionExternalDictionary.LocalTransactionId,
                                     XD.DotNetAtomicTransactionExternalDictionary.Namespace);
 
            writer.WriteValue(this.transactionId);
            writer.WriteEndElement(); 
 
            if (this.contextId != null)
            { 
                writer.WriteStartElement(XD.DotNetAtomicTransactionExternalDictionary.ContextId,
                                         XD.DotNetAtomicTransactionExternalDictionary.Namespace);

                writer.WriteValue(this.contextId); 
                writer.WriteEndElement();
            } 
 
            if (this.tokenId != null)
            { 
                writer.WriteStartElement(XD.DotNetAtomicTransactionExternalDictionary.TokenId,
                                         XD.DotNetAtomicTransactionExternalDictionary.Namespace);

                writer.WriteValue(this.tokenId); 
                writer.WriteEndElement();
            } 
        } 

        public static WsatRegistrationHeader ReadFrom(Message message) 
        {
            int index;
            try
            { 
                index = message.Headers.FindHeader(HeaderName, HeaderNamespace);
            } 
            catch (MessageHeaderException e) 
            {
                DiagnosticUtility.ExceptionUtility.TraceHandledException(e, TraceEventType.Warning); 
                return null;
            }
            if (index < 0)
            { 
                return null;
            } 
 
            WsatRegistrationHeader header;
 
            XmlDictionaryReader reader = message.Headers.GetReaderAtHeader(index);
            using (reader)
            {
                try 
                {
                    header = ReadFrom(reader); 
                } 
                catch (XmlException e)
                { 
                    DiagnosticUtility.ExceptionUtility.TraceHandledException(e, TraceEventType.Error);
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidEnlistmentHeaderException(e.Message, e));
                }
            } 

            MessageHeaderInfo headerInfo = message.Headers[index]; 
            if (!message.Headers.UnderstoodHeaders.Contains(headerInfo)) 
            {
                message.Headers.UnderstoodHeaders.Add(headerInfo); 
            }

            return header;
        } 

        static WsatRegistrationHeader ReadFrom(XmlDictionaryReader reader) 
        { 
            reader.ReadFullStartElement(XD.DotNetAtomicTransactionExternalDictionary.RegisterInfo,
                                        XD.DotNetAtomicTransactionExternalDictionary.Namespace); 

            reader.MoveToStartElement(XD.DotNetAtomicTransactionExternalDictionary.LocalTransactionId,
                                      XD.DotNetAtomicTransactionExternalDictionary.Namespace);
 
            // TransactionId
            Guid transactionId = reader.ReadElementContentAsGuid(); 
            if (transactionId == Guid.Empty) 
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( 
                    new XmlException(SR.GetString(SR.InvalidRegistrationHeaderTransactionId)));
            }

            // ContextId 
            string contextId;
            if (reader.IsStartElement(XD.DotNetAtomicTransactionExternalDictionary.ContextId, 
                                      XD.DotNetAtomicTransactionExternalDictionary.Namespace)) 
            {
                Uri uri; 
                contextId = reader.ReadElementContentAsString().Trim();
                if (contextId.Length == 0 ||
                    contextId.Length > CoordinationContext.MaxIdentifierLength ||
                    !Uri.TryCreate(contextId, UriKind.Absolute, out uri)) 
                {
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( 
                        new XmlException(SR.GetString(SR.InvalidRegistrationHeaderIdentifier))); 
                }
            } 
            else
            {
                contextId = null;
            } 

            // TokenId 
            string tokenId; 
            if (reader.IsStartElement(XD.DotNetAtomicTransactionExternalDictionary.TokenId,
                                      XD.DotNetAtomicTransactionExternalDictionary.Namespace)) 
            {
                tokenId = reader.ReadElementContentAsString().Trim();
                if (tokenId.Length == 0)
                { 
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(
                        new XmlException(SR.GetString(SR.InvalidRegistrationHeaderTokenId))); 
                } 
            }
            else 
            {
                tokenId = null;
            }
 
            // Skip unknown elements
            while (reader.IsStartElement()) 
            { 
                reader.Skip();
            } 
            reader.ReadEndElement();

            return new WsatRegistrationHeader(transactionId, contextId, tokenId);
        } 
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                        

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