MetadataExporter.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 / Description / MetadataExporter.cs / 1 / MetadataExporter.cs

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

namespace System.ServiceModel.Description 
{
    using System.Xml; 
    using System.ServiceModel.Channels; 
    using System.Collections.Generic;
    using System.Collections.ObjectModel; 

    //For export we provide a builder that allows the gradual construction of a set of MetadataDocuments
    public abstract class MetadataExporter
    { 
        PolicyVersion policyVersion = PolicyVersion.Policy12;
 
        public PolicyVersion PolicyVersion 
        {
            get {return policyVersion;} 
            set
            {
                if (value == null)
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("value"); 
                policyVersion = value;
            } 
        } 

        //prevent inheritance until we are ready to allow it. 
        internal MetadataExporter(){}

        readonly Collection errors = new Collection();
        readonly Dictionary state = new Dictionary(); 

        public abstract void ExportContract(ContractDescription contract); 
        public abstract void ExportEndpoint(ServiceEndpoint endpoint); 

        public abstract MetadataSet GetGeneratedMetadata(); 
        public Collection Errors { get { return errors; } }  // errors
        public Dictionary State { get { return state; } }        // state

        protected internal PolicyConversionContext ExportPolicy(ServiceEndpoint endpoint) 
        {
            PolicyConversionContext policyContext = new ExportedPolicyConversionContext(endpoint); 
 
            foreach (IPolicyExportExtension exporter in endpoint.Binding.CreateBindingElements().FindAll ())
                try 
                {
                    exporter.ExportPolicy(this, policyContext);
                }
#pragma warning suppress 56500 // covered by FxCOP 
                catch (Exception e)
                { 
                    if (DiagnosticUtility.IsFatal(e)) 
                        throw;
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(CreateExtensionException(exporter, e)); 
                }

            return policyContext;
        } 

 
 
        sealed class ExportedPolicyConversionContext : PolicyConversionContext
        { 
            readonly BindingElementCollection bindingElements;

            internal ExportedPolicyConversionContext(ServiceEndpoint endpoint) : base (endpoint)
            { 
                bindingElements = endpoint.Binding.CreateBindingElements();
 
                bindingAssertions = new PolicyAssertionCollection(); 
                operationBindingAssertions = new Dictionary();
                messageBindingAssertions = new Dictionary(); 
                faultBindingAssertions = new Dictionary();
            }

            PolicyAssertionCollection bindingAssertions; 
            Dictionary operationBindingAssertions;
            Dictionary messageBindingAssertions; 
            Dictionary faultBindingAssertions; 

            public override BindingElementCollection BindingElements { get { return bindingElements; } } 

            public override PolicyAssertionCollection GetBindingAssertions()
            {
                return bindingAssertions; 
            }
 
            public override PolicyAssertionCollection GetOperationBindingAssertions(OperationDescription operation) 
            {
                lock (operationBindingAssertions) 
                {
                    if (!operationBindingAssertions.ContainsKey(operation))
                        operationBindingAssertions.Add(operation, new PolicyAssertionCollection());
                } 

                return operationBindingAssertions[operation]; 
            } 

            public override PolicyAssertionCollection GetMessageBindingAssertions(MessageDescription message) 
            {
                lock (messageBindingAssertions)
                {
                    if (!messageBindingAssertions.ContainsKey(message)) 
                        messageBindingAssertions.Add(message, new PolicyAssertionCollection());
                } 
                return messageBindingAssertions[message]; 
            }
 
            public override PolicyAssertionCollection GetFaultBindingAssertions(FaultDescription fault)
            {
                lock (faultBindingAssertions)
                { 
                    if (!faultBindingAssertions.ContainsKey(fault))
                        faultBindingAssertions.Add(fault, new PolicyAssertionCollection()); 
                } 
                return faultBindingAssertions[fault];
            } 

        }

        Exception CreateExtensionException(IPolicyExportExtension exporter, Exception e) 
        {
            string errorMessage = SR.GetString(SR.PolicyExtensionExportError, exporter.GetType(), e.Message); 
            return new InvalidOperationException(errorMessage, e); 

        } 

    }

} 

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