visual verificar studio sitio ruta puede publicar net iis7 habilitar configurar asp application aplicaciones aplicacion acceso c# iis-7 iis-6 32bit-64bit

c# - verificar - publicar web api en iis



Cómo habilitar el modo de aplicaciones de 32 bits en IIS 6 e IIS 7 usando c# (2)

Existen algunas diferencias en la administración programática de IIS 6 e IIS 7.

IIS 6 se administra mediante programación utilizando la clase DirectoryEntry y la API de base de datos de la metabase.

IIS 7 se gestiona utilizando el conjunto de administración de Microsoft.Web.Administration y la clase de ServerManager .

Además, IIS 6 no puede ejecutar procesos de trabajo de 64 bits y 32 bits al mismo tiempo (consulte este MSDN BLOG ). Por lo tanto, establecer Enable32BitAppOnWin64 en true para IIS 6 significa que todos los procesos de trabajo (todos los grupos de aplicaciones) se ejecutan como procesos de 32 bits.

IIS 7 es capaz de ejecutar procesos de trabajo de 64 y 32 bits al mismo tiempo. Esto significa que establece Enable32BitAppOnWin64 para un grupo de aplicaciones específico y no para todos los grupos de aplicaciones.

También debe detectar la versión de IIS para usar la API correcta. Esto se puede hacer leyendo los siguientes valores DWORD del registro (para obtener más información, vea Learn IIS ):

HKLM/Software/Microsoft/InetStp/MajorVersion and HKLM/Software/Microsoft/InetStp/MinorVersion

Entonces, aquí hay un código para configurar Enable32BitAppOnWin64 para IIS 6 e IIS 7 (tenga en cuenta que debe hacer referencia a los ensamblados Microsoft.Web.Administration y System.DirectoryServices en su proyecto de Visual Studio):

private static Version GetIISVerion() { using (RegistryKey inetStpKey = Registry.LocalMachine.OpenSubKey(@"Software/Microsoft/InetStp")) { int majorVersion = (int)inetStpKey.GetValue("MajorVersion"); int minorVersion = (int)inetStpKey.GetValue("MinorVersion"); return new Version(majorVersion, minorVersion); } } private static void Enable32BitAppOnWin64IIS7(string appPoolName) { Console.Out.WriteLine("Setting Enable32BitAppOnWin64 for {0} (IIS7)", appPoolName); using (ServerManager serverMgr = new ServerManager()) { ApplicationPool appPool = serverMgr.ApplicationPools[appPoolName]; if (appPool == null) { throw new ApplicationException(String.Format("The pool {0} does not exist", appPoolName)); } appPool.Enable32BitAppOnWin64 = true; serverMgr.CommitChanges(); } } private static void Enable32BitAppOnWin64IIS6(string serverName) { Console.Out.WriteLine("Setting Enable32BitAppOnWin64 for IIS6"); using (DirectoryEntry appPools = new DirectoryEntry(String.Format("IIS://{0}/W3SVC/AppPools", serverName))) { appPools.Properties["Enable32BitAppOnWin64"].Value = true; appPools.CommitChanges(); } } public static void Enable32BitAppOnWin64(string serverName, string appPoolName) { Version v = GetIISVerion(); // Get installed version of IIS Console.Out.WriteLine("IIS-Version: {0}", v); if (v.Major == 6) // Handle IIS 6 { Enable32BitAppOnWin64IIS6(serverName); return; } if (v.Major == 7) // Handle IIS 7 { Enable32BitAppOnWin64IIS7(appPoolName); return; } throw new ApplicationException(String.Format("Unknown IIS version: {0}", v.ToString())); } static void Main(string[] args) { Enable32BitAppOnWin64(Environment.MachineName, "DefaultAppPool"); }

También debo mencionar que existe la posibilidad de utilizar la metabase API para IIS 7 también. En los sistemas operativos Windows Server 2008, puede instalar un servicio de función denominado "Compatibilidad de administración de IIS 6". Este servicio de función le permite usar la "antigua" API de IIS 6 para administrar IIS 7.

Si la "Compatibilidad de administración de IIS 6" es una opción para usted, cambie la función Enable32BitAppOnWin64IIS7 siguiente manera:

private static void Enable32BitAppOnWin64IIS7(string serverName, string appPoolName) { Console.Out.WriteLine("Setting Enable32BitAppOnWin64 for {0} (IIS7)", appPoolName); using (DirectoryEntry appPools = new DirectoryEntry(String.Format("IIS://{0}/W3SVC/AppPools/{1}", serverName, appPoolName))) { appPools.Properties["Enable32BitAppOnWin64"].Value = true; appPools.CommitChanges(); } }

Por supuesto, entonces no tiene que hacer referencia al ensamblado de Microsoft.Web.Administration .

Quiero cambiar la propiedad Enable32BitAppOnWin64 usando C #. Sé que la forma de interactuar con IIS 6 e IIS 7 es diferente. pero necesito la solución para ambas versiones.