ServiceHostFactory.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 / WCF / System.ServiceModel.Activation / System / ServiceModel / Activation / ServiceHostFactory.cs / 1305376 / ServiceHostFactory.cs

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

namespace System.ServiceModel.Activation 
{
    using System.Collections.ObjectModel; 
    using System.Reflection; 
    using System.Runtime.CompilerServices;
 
    [TypeForwardedFrom("System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
    public class ServiceHostFactory : ServiceHostFactoryBase
 	{
        Collection referencedAssemblies; 

        public ServiceHostFactory() 
        { 
            this.referencedAssemblies = new Collection();
        } 

        internal void AddAssemblyReference(string assemblyName)
        {
            this.referencedAssemblies.Add(assemblyName); 
        }
 
        public override ServiceHostBase CreateServiceHost(string constructorString, Uri[] baseAddresses) 
        {
            if (!AspNetEnvironment.Enabled) 
            {
                throw FxTrace.Exception.AsError(new InvalidOperationException(SR.Hosting_ProcessNotExecutingUnderHostedContext("ServiceHostFactory.CreateServiceHost")));
            }
 
            if (string.IsNullOrEmpty(constructorString))
            { 
                throw FxTrace.Exception.Argument("constructorString", SR.Hosting_ServiceTypeNotProvided); 
            }
 
            Type type = Type.GetType(constructorString, false);

            if (type == null)
            { 
                //config service activation scenario
                if (this.referencedAssemblies.Count == 0) 
                { 
                    AspNetEnvironment.Current.EnsureAllReferencedAssemblyLoaded();
                } 

                foreach (string assemblyName in this.referencedAssemblies)
                {
                    Assembly assembly = Assembly.Load(assemblyName); 
                    type = assembly.GetType(constructorString, false);
                    if (type != null) 
                    { 
                        break;
                    } 
                }
            }

            if (type == null) 
            {
                Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); 
                for (int i = 0; i < assemblies.Length; i++) 
                {
                    type = assemblies[i].GetType(constructorString, false); 
                    if (type != null)
                    {
                        break;
                    } 
                }
            } 
 
            if (type == null)
            { 
                throw FxTrace.Exception.AsError(new InvalidOperationException(SR.Hosting_ServiceTypeNotResolved(constructorString)));
            }

            return CreateServiceHost(type, baseAddresses); 
        }
 
        protected virtual ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses) 
        {
            return new ServiceHost(serviceType, baseAddresses); 
        }
    }
}

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