HttpNamespaceReservationInstallComponent.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 / Tools / xws_reg / System / ServiceModel / Install / HttpNamespaceReservationInstallComponent.cs / 1 / HttpNamespaceReservationInstallComponent.cs

                            //------------------------------------------------------------------------------ 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//-----------------------------------------------------------------------------
namespace System.ServiceModel.Install
{ 
    using System.ComponentModel;
    using System.Runtime.InteropServices; 
 
    class HttpNamespaceReservationInstallComponent : ServiceModelInstallComponent
    { 

        internal override string DisplayName
        {
            get {return SR.GetString(SR.HttpNamespaceReservationsName); } 
        }
 
        protected override string InstallActionMessage 
        {
            get {return SR.GetString(SR.HttpNamespaceReservationsInstall); } 
        }
        internal override string[] InstalledVersions
        {
            get 
            {
                string[] result; 
                if (this.IsInstalled) 
                {
                    result = new string[] {ServiceModelInstallStrings.ReservedNamespace}; 
                }
                else
                {
                    result = new string[] {}; 
                }
                return result; 
            } 
        }
 
        internal override bool IsInstalled
        {
            get
            { 
                bool result;
 
                try 
                {
                    int retVal = NativeMethods.HttpInitialize(NativeMethods.HTTPAPI_VERSION, 
                        NativeMethods.HTTP_INITIALIZE_CONFIG, IntPtr.Zero);
                    if (retVal != ErrorCodes.NoError)
                    {
#pragma warning suppress 56503 // [....]; not a publicly accessible API 
                        throw new Win32Exception(retVal);
                    } 
 
                    HTTP_SERVICE_CONFIG_URLACL_QUERY query = new HTTP_SERVICE_CONFIG_URLACL_QUERY();
                    query.QueryDesc = HTTP_SERVICE_CONFIG_QUERY_TYPE.HttpServiceConfigQueryExact; 
                    query.KeyDesc = new HTTP_SERVICE_CONFIG_URLACL_KEY(ServiceModelInstallStrings.ReservedNamespace);

                    int returnLength;
                    retVal = NativeMethods.HttpQueryServiceConfiguration(IntPtr.Zero, 
                        HTTP_SERVICE_CONFIG_ID.HttpServiceConfigUrlAclInfo, ref query, Marshal.SizeOf(query),
                        IntPtr.Zero, 0, out returnLength, IntPtr.Zero); 
                    switch (retVal) 
                    {
                        case ErrorCodes.NoError: 
                        case ErrorCodes.ErrorInsufficientBuffer:
                            result = true;
                            break;
                        case ErrorCodes.ErrorFileNotFound: 
                            result = false;
                            break; 
                        default: 
#pragma warning suppress 56503 // [....]; not a publicly accessible API
                            throw new Win32Exception(retVal); 
                    }
                }
                finally
                { 
#pragma warning disable 56523 //[....]; Win32 errors tracked through method return value
#pragma warning disable 56031 //[....]; No need to check return value since shutting down 
                    NativeMethods.HttpTerminate(NativeMethods.HTTP_INITIALIZE_CONFIG, IntPtr.Zero); 
#pragma restore
                } 

                return result;
            }
        } 

        protected override string ReinstallActionMessage 
        { 
            get {return SR.GetString(SR.HttpNamespaceReservationsReinstall); }
        } 

        protected override string UninstallActionMessage
        {
            get {return SR.GetString(SR.HttpNamespaceReservationsUninstall); } 
        }
 
        static void FreeURL(string networkURL) 
        {
            int retVal = ErrorCodes.NoError; 

            try
            {
#pragma warning suppress 56523 //[....]; Win32 errors tracked through method return value 
                retVal = NativeMethods.HttpInitialize(NativeMethods.HTTPAPI_VERSION, NativeMethods.HTTP_INITIALIZE_CONFIG, IntPtr.Zero);
                if (ErrorCodes.NoError == retVal) 
                { 
                    HTTP_SERVICE_CONFIG_URLACL_KEY urlAclKey = new HTTP_SERVICE_CONFIG_URLACL_KEY(networkURL);
                    HTTP_SERVICE_CONFIG_URLACL_SET configInformation = new HTTP_SERVICE_CONFIG_URLACL_SET(); 
                    configInformation.KeyDesc = urlAclKey;

                    int configInformationSize = Marshal.SizeOf(configInformation);
 
#pragma warning suppress 56523 //[....]; Win32 errors tracked through method return value
                    retVal = NativeMethods.HttpDeleteServiceConfiguration(IntPtr.Zero, 
                        HTTP_SERVICE_CONFIG_ID.HttpServiceConfigUrlAclInfo, 
                        ref configInformation,
                        configInformationSize, 
                        IntPtr.Zero);
                }
            }
            finally 
            {
#pragma warning disable 56523 //[....]; Win32 errors tracked through method return value 
#pragma warning disable 56031 //[....]; No need to check return value since shutting down 
                NativeMethods.HttpTerminate(NativeMethods.HTTP_INITIALIZE_CONFIG, IntPtr.Zero);
#pragma restore 
            }

            if (ErrorCodes.NoError != retVal)
            { 
                throw new Win32Exception(retVal);
            } 
        } 

        internal override void Install(OutputLevel outputLevel) 
        {
            if (this.IsInstalled)
            {
                EventLogger.LogWarning(SR.GetString(SR.HttpNamespaceReservationsAlreadyExist), 
                    (OutputLevel.Verbose == outputLevel));
            } 
            else 
            {
                bool throwing = true; 
                try
                {
                    ReserveURL(ServiceModelInstallStrings.ReservedNamespace, ServiceModelInstallStrings.ReservedNamespaceAcl);
                    throwing = false; 
                }
                finally 
                { 
                    if (throwing)
                    { 
                        FreeURL(ServiceModelInstallStrings.ReservedNamespace);
                    }
                }
            } 
        }
 
        static void ReserveURL(string networkURL, string securityDescriptor) 
        {
            int retVal = ErrorCodes.NoError; 

            try
            {
#pragma warning suppress 56523 //[....]; Win32 errors tracked through method return value 
                retVal = NativeMethods.HttpInitialize(NativeMethods.HTTPAPI_VERSION, NativeMethods.HTTP_INITIALIZE_CONFIG, IntPtr.Zero);
                if (ErrorCodes.NoError == retVal) 
                { 
                    HTTP_SERVICE_CONFIG_URLACL_KEY keyDesc = new HTTP_SERVICE_CONFIG_URLACL_KEY(networkURL);
                    HTTP_SERVICE_CONFIG_URLACL_PARAM paramDesc = new HTTP_SERVICE_CONFIG_URLACL_PARAM(securityDescriptor); 

                    HTTP_SERVICE_CONFIG_URLACL_SET configInformation = new HTTP_SERVICE_CONFIG_URLACL_SET();
                    configInformation.KeyDesc = keyDesc;
                    configInformation.ParamDesc = paramDesc; 

                    int configInformationLength = Marshal.SizeOf(configInformation); 
 
#pragma warning suppress 56523 //[....]; Win32 errors tracked through method return value
                    retVal = NativeMethods.HttpSetServiceConfiguration(IntPtr.Zero, 
                        HTTP_SERVICE_CONFIG_ID.HttpServiceConfigUrlAclInfo,
                        ref configInformation,
                        configInformationLength,
                        IntPtr.Zero); 

                    if (ErrorCodes.ErrorAlreadyExists == retVal) 
                    { 
#pragma warning suppress 56523 //[....]; Win32 errors tracked through method return value
                        retVal = NativeMethods.HttpDeleteServiceConfiguration(IntPtr.Zero, 
                            HTTP_SERVICE_CONFIG_ID.HttpServiceConfigUrlAclInfo,
                            ref configInformation,
                            configInformationLength,
                            IntPtr.Zero); 

                        if (ErrorCodes.NoError == retVal) 
                        { 
#pragma warning suppress 56523 //[....]; Win32 errors tracked through method return value
                            retVal = NativeMethods.HttpSetServiceConfiguration(IntPtr.Zero, 
                                HTTP_SERVICE_CONFIG_ID.HttpServiceConfigUrlAclInfo,
                                ref configInformation,
                                configInformationLength,
                                IntPtr.Zero); 
                        }
                    } 
                } 
            }
            finally 
            {
#pragma warning disable 56523 //[....]; Win32 errors tracked through method return value
#pragma warning disable 56031 //[....]; No need to check return value since shutting down
                NativeMethods.HttpTerminate(NativeMethods.HTTP_INITIALIZE_CONFIG, IntPtr.Zero); 
#pragma restore
            } 
 
            if (ErrorCodes.NoError != retVal)
            { 
                throw new Win32Exception(retVal);
            }
        }
 
        internal override void Uninstall(OutputLevel outputLevel)
        { 
            if (!this.IsInstalled) 
            {
                EventLogger.LogWarning(SR.GetString(SR.HttpNamespaceReservationsNotInstalled), 
                    (OutputLevel.Verbose == outputLevel));
            }
            else
            { 
                try
                { 
                    FreeURL(ServiceModelInstallStrings.ReservedNamespace); 
                }
                catch (Win32Exception exception) 
                {
                    EventLogger.LogWarning(SR.GetString(SR.FreeHttpNamespaceFailed, exception),
                        (OutputLevel.Quiet < outputLevel));
                } 
            }
        } 
 
        internal override InstallationState VerifyInstall()
        { 
            return this.IsInstalled ? InstallationState.InstalledDefaults : InstallationState.NotInstalled;
        }
    }
} 

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