public IRegisteredObject CreateObject (IApplicationHost appHost, Type type) { if (appHost == null) throw new ArgumentNullException ("appHost"); if (type == null) throw new ArgumentNullException ("type"); return CreateObject (appHost.GetSiteID (), type, appHost.GetVirtualPath (), appHost.GetPhysicalPath (), true, true); }
public IRegisteredObject CreateObject(IApplicationHost appHost, Type type) { if (appHost == null) { throw new ArgumentNullException("appHost"); } if (type == null) { throw new ArgumentNullException("type"); } string appId = CreateSimpleAppId(VirtualPath.Create(appHost.GetVirtualPath()), appHost.GetPhysicalPath(), appHost.GetSiteName()); return(CreateObjectInternal(appId, type, appHost, false)); }
public IRegisteredObject CreateObject(IApplicationHost appHost, Type type) { if (appHost == null) { throw new ArgumentNullException("appHost"); } if (type == null) { throw new ArgumentNullException("type"); } return(CreateObject(appHost.GetSiteID(), type, appHost.GetVirtualPath(), appHost.GetPhysicalPath(), true, true)); }
private HostingEnvironment CreateAppDomainWithHostingEnvironment(string appId, IApplicationHost appHost, HostingEnvironmentParameters hostingParameters) { string physicalPath = appHost.GetPhysicalPath(); if(!StringUtil.StringEndsWith(physicalPath, Path.DirectorySeparatorChar)) physicalPath = physicalPath + Path.DirectorySeparatorChar; string domainId = ConstructAppDomainId(appId); string tmp = appId.ToLower(CultureInfo.InvariantCulture) + physicalPath.ToLower(CultureInfo.InvariantCulture); string appName = tmp; VirtualPath appVPath = VirtualPath.Create(appHost.GetVirtualPath()); Dictionary<string, string> dict = new Dictionary<string, string>(20); AppDomainSetup setup = new AppDomainSetup(); PopulateDomainBindings(domainId, appId, appName, physicalPath, appVPath, setup, dict); AppDomain domain = null; Exception innerException = null; _log.Debug("DomainBindings " + domainId); _log.Debug("PhysicalPath = " + physicalPath); _log.Debug("VirtualPath = " + appVPath.VirtualPathString); try { domain = AppDomain.CreateDomain(domainId, GetDefaultDomainIdentity(), setup); foreach (KeyValuePair<string, string> entry in dict) { domain.SetData(entry.Key, entry.Value); } } catch(Exception exception) { innerException = exception; } if (domain == null) throw new SystemException("Cannot create AppDomain", innerException); Type type = typeof(HostingEnvironment); string fullName = type.Module.Assembly.FullName; string typeName = type.FullName; ObjectHandle handle = null; try { handle = domain.CreateInstance(fullName, typeName); } finally { if (handle == null) { _log.Debug("Unloading Domain " + domain.FriendlyName); AppDomain.Unload(domain); } } HostingEnvironment environment = (handle != null) ? (handle.Unwrap() as HostingEnvironment) : null; if (environment == null) throw new SystemException("Cannot create HostingEnvironment"); environment.Initialize(this, appHost); _appDomains[appId] = environment; return environment; }
public IRegisteredObject CreateObject(IApplicationHost appHost, Type type) { if (appHost == null) throw new ArgumentNullException("appHost"); if (type == null) throw new ArgumentNullException("type"); string appId = CreateSimpleAppId(VirtualPath.Create(appHost.GetVirtualPath()), appHost.GetPhysicalPath(), appHost.GetSiteName()); return CreateObjectInternal(appId, type, appHost, false); }
private HostingEnvironment CreateAppDomainWithHostingEnvironment(string appId, IApplicationHost appHost, HostingEnvironmentParameters hostingParameters) { string physicalPath = appHost.GetPhysicalPath(); if (!System.Web.Util.StringUtil.StringEndsWith(physicalPath, Path.DirectorySeparatorChar)) { physicalPath = physicalPath + Path.DirectorySeparatorChar; } string domainId = ConstructAppDomainId(appId); string appName = System.Web.Util.StringUtil.GetStringHashCode(appId.ToLower(CultureInfo.InvariantCulture) + physicalPath.ToLower(CultureInfo.InvariantCulture)).ToString("x", CultureInfo.InvariantCulture); VirtualPath appVPath = VirtualPath.Create(appHost.GetVirtualPath()); IDictionary dict = new Hashtable(20); AppDomainSetup setup = new AppDomainSetup(); PopulateDomainBindings(domainId, appId, appName, physicalPath, appVPath, setup, dict); AppDomain domain = null; Exception innerException = null; string siteID = appHost.GetSiteID(); string virtualPathStringNoTrailingSlash = appVPath.VirtualPathStringNoTrailingSlash; bool flag = false; bool flag2 = false; System.Configuration.Configuration configuration = null; PolicyLevel policyLevel = null; PermissionSet grantSet = null; List<StrongName> list = new List<StrongName>(); string[] strArray = new string[] { "System.Web, PublicKey=002400000480000094000000060200000024000052534131000400000100010007d1fa57c4aed9f0a32e84aa0faefd0de9e8fd6aec8f87fb03766c834c99921eb23be79ad9d5dcc1dd9ad236132102900b723cf980957fc4e177108fc607774f29e8320e92ea05ece4e821c0a5efe8f1645c4c0c93c1ab99285d622caa652c1dfad63d745d6f2de5f17e5eaf0fc4963d261c8a12436518206dc093344d5ad293", "System.Web.Extensions, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9", "System.Web.Abstractions, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9", "System.Web.Routing, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9", "System.ComponentModel.DataAnnotations, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9", "System.Web.DynamicData, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9", "System.Web.DataVisualization, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9", "System.Web.ApplicationServices, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9" }; Exception appDomainCreationException = null; ImpersonationContext context = null; IntPtr zero = IntPtr.Zero; if ((hostingParameters != null) && ((hostingParameters.HostingFlags & HostingEnvironmentFlags.ClientBuildManager) != HostingEnvironmentFlags.Default)) { flag2 = true; setup.LoaderOptimization = LoaderOptimization.MultiDomainHost; } try { zero = appHost.GetConfigToken(); if (zero != IntPtr.Zero) { context = new ImpersonationContext(zero); } try { if (flag2 && (hostingParameters.IISExpressVersion != null)) { grantSet = new PermissionSet(PermissionState.Unrestricted); setup.PartialTrustVisibleAssemblies = strArray; } else { if (appHost is ISAPIApplicationHost) { string key = "f" + siteID + appVPath.VirtualPathString; MapPathCacheInfo info1 = (MapPathCacheInfo) HttpRuntime.CacheInternal.Remove(key); configuration = WebConfigurationManager.OpenWebConfiguration(virtualPathStringNoTrailingSlash, siteID); } else { WebConfigurationFileMap fileMap = new WebConfigurationFileMap(); IConfigMapPath path2 = appHost.GetConfigMapPathFactory().Create(appVPath.VirtualPathString, physicalPath); string directory = null; string baseName = null; string path = "/"; path2.GetPathConfigFilename(siteID, path, out directory, out baseName); if (directory != null) { fileMap.VirtualDirectories.Add(path, new VirtualDirectoryMapping(Path.GetFullPath(directory), true)); } foreach (string str10 in virtualPathStringNoTrailingSlash.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries)) { path = path + str10; path2.GetPathConfigFilename(siteID, path, out directory, out baseName); if (directory != null) { fileMap.VirtualDirectories.Add(path, new VirtualDirectoryMapping(Path.GetFullPath(directory), true)); } path = path + "/"; } configuration = WebConfigurationManager.OpenMappedWebConfiguration(fileMap, virtualPathStringNoTrailingSlash, siteID); } TrustSection trustSection = (TrustSection) configuration.GetSection("system.web/trust"); if ((trustSection == null) || string.IsNullOrEmpty(trustSection.Level)) { throw new ConfigurationErrorsException(System.Web.SR.GetString("Config_section_not_present", new object[] { "trust" })); } bool legacyCasModel = trustSection.LegacyCasModel; if (legacyCasModel) { SetNetFx40LegacySecurityPolicy(setup); } if (flag2) { grantSet = new PermissionSet(PermissionState.Unrestricted); setup.PartialTrustVisibleAssemblies = strArray; } else { flag = legacyCasModel; if (!flag) { if (trustSection.Level == "Full") { grantSet = new PermissionSet(PermissionState.Unrestricted); setup.PartialTrustVisibleAssemblies = strArray; } else { SecurityPolicySection section = (SecurityPolicySection) configuration.GetSection("system.web/securityPolicy"); CompilationSection compilationSection = (CompilationSection) configuration.GetSection("system.web/compilation"); FullTrustAssembliesSection section4 = (FullTrustAssembliesSection) configuration.GetSection("system.web/fullTrustAssemblies"); policyLevel = GetPartialTrustPolicyLevel(trustSection, section, compilationSection, physicalPath, appVPath); grantSet = policyLevel.GetNamedPermissionSet(trustSection.PermissionSetName); if (grantSet == null) { throw new ConfigurationErrorsException(System.Web.SR.GetString("Permission_set_not_found", new object[] { trustSection.PermissionSetName })); } if (section4 != null) { FullTrustAssemblyCollection fullTrustAssemblies = section4.FullTrustAssemblies; if (fullTrustAssemblies != null) { list.AddRange(from fta in fullTrustAssemblies.Cast<FullTrustAssembly>() select CreateStrongName(fta.AssemblyName, fta.Version, fta.PublicKey)); } } if (list.Contains(_mwiV1StrongName)) { list.AddRange(CreateFutureMicrosoftWebInfrastructureStrongNames()); } setup.AppDomainManagerType = typeof(AspNetAppDomainManager).FullName; setup.AppDomainManagerAssembly = typeof(AspNetAppDomainManager).Assembly.FullName; } } if (trustSection.Level != "Full") { PartialTrustVisibleAssembliesSection section5 = (PartialTrustVisibleAssembliesSection) configuration.GetSection("system.web/partialTrustVisibleAssemblies"); string[] array = null; if (section5 != null) { PartialTrustVisibleAssemblyCollection partialTrustVisibleAssemblies = section5.PartialTrustVisibleAssemblies; if ((partialTrustVisibleAssemblies != null) && (partialTrustVisibleAssemblies.Count != 0)) { array = new string[partialTrustVisibleAssemblies.Count + strArray.Length]; for (int i = 0; i < partialTrustVisibleAssemblies.Count; i++) { array[i] = partialTrustVisibleAssemblies[i].AssemblyName + ", PublicKey=" + NormalizePublicKeyBlob(partialTrustVisibleAssemblies[i].PublicKey); } strArray.CopyTo(array, partialTrustVisibleAssemblies.Count); } } if (array == null) { array = strArray; } setup.PartialTrustVisibleAssemblies = array; } } } } catch (Exception exception3) { appDomainCreationException = exception3; grantSet = new PermissionSet(PermissionState.Unrestricted); } try { if (flag) { domain = AppDomain.CreateDomain(domainId, GetDefaultDomainIdentity(), setup); } else { domain = AppDomain.CreateDomain(domainId, GetDefaultDomainIdentity(), setup, grantSet, list.ToArray()); } foreach (DictionaryEntry entry in dict) { domain.SetData((string) entry.Key, (string) entry.Value); } } catch (Exception exception4) { innerException = exception4; } } finally { if (context != null) { context.Undo(); context = null; } if (zero != IntPtr.Zero) { System.Web.UnsafeNativeMethods.CloseHandle(zero); zero = IntPtr.Zero; } } if (domain == null) { throw new SystemException(System.Web.SR.GetString("Cannot_create_AppDomain"), innerException); } Type type = typeof(HostingEnvironment); string fullName = type.Module.Assembly.FullName; string typeName = type.FullName; ObjectHandle handle = null; ImpersonationContext context2 = null; IntPtr token = IntPtr.Zero; int num2 = 10; int num3 = 0; while (num3 < num2) { try { token = appHost.GetConfigToken(); break; } catch (InvalidOperationException) { num3++; Thread.Sleep(250); continue; } } if (token != IntPtr.Zero) { try { context2 = new ImpersonationContext(token); } catch { } finally { System.Web.UnsafeNativeMethods.CloseHandle(token); } } try { handle = Activator.CreateInstance(domain, fullName, typeName); } finally { if (context2 != null) { context2.Undo(); } if (handle == null) { AppDomain.Unload(domain); } } HostingEnvironment environment = (handle != null) ? (handle.Unwrap() as HostingEnvironment) : null; if (environment == null) { throw new SystemException(System.Web.SR.GetString("Cannot_create_HostEnv")); } IConfigMapPathFactory configMapPathFactory = appHost.GetConfigMapPathFactory(); if (appDomainCreationException == null) { environment.Initialize(this, appHost, configMapPathFactory, hostingParameters, policyLevel); return environment; } environment.Initialize(this, appHost, configMapPathFactory, hostingParameters, policyLevel, appDomainCreationException); return environment; }
private string CreateSimpleAppID(IApplicationHost appHost) { if (appHost == null) { throw new ArgumentNullException("appHost"); } return this.CreateSimpleAppID(VirtualPath.Create(appHost.GetVirtualPath()), appHost.GetPhysicalPath(), appHost.GetSiteName()); }
private HostingEnvironment CreateAppDomainWithHostingEnvironment(string appId, IApplicationHost appHost, HostingEnvironmentParameters hostingParameters) { string physicalPath = appHost.GetPhysicalPath(); if (!StringUtil.StringEndsWith(physicalPath, Path.DirectorySeparatorChar)) { physicalPath = physicalPath + Path.DirectorySeparatorChar; } string domainId = ConstructAppDomainId(appId); string tmp = appId.ToLower(CultureInfo.InvariantCulture) + physicalPath.ToLower(CultureInfo.InvariantCulture); string appName = tmp; VirtualPath appVPath = VirtualPath.Create(appHost.GetVirtualPath()); Dictionary <string, string> dict = new Dictionary <string, string>(20); AppDomainSetup setup = new AppDomainSetup(); PopulateDomainBindings(domainId, appId, appName, physicalPath, appVPath, setup, dict); AppDomain domain = null; Exception innerException = null; _log.Debug("DomainBindings " + domainId); _log.Debug("PhysicalPath = " + physicalPath); _log.Debug("VirtualPath = " + appVPath.VirtualPathString); try { domain = AppDomain.CreateDomain(domainId, GetDefaultDomainIdentity(), setup); foreach (KeyValuePair <string, string> entry in dict) { domain.SetData(entry.Key, entry.Value); } } catch (Exception exception) { innerException = exception; } if (domain == null) { throw new SystemException("Cannot create AppDomain", innerException); } Type type = typeof(HostingEnvironment); string fullName = type.Module.Assembly.FullName; string typeName = type.FullName; ObjectHandle handle = null; try { handle = domain.CreateInstance(fullName, typeName); } finally { if (handle == null) { _log.Debug("Unloading Domain " + domain.FriendlyName); AppDomain.Unload(domain); } } HostingEnvironment environment = (handle != null) ? (handle.Unwrap() as HostingEnvironment) : null; if (environment == null) { throw new SystemException("Cannot create HostingEnvironment"); } environment.Initialize(this, appHost); _appDomains[appId] = environment; return(environment); }