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.
En lugar de tratar de reproducir las respuestas de otra persona, aquí hay un enlace a un asker anterior y las respuestas que recibieron. Espero que sean útiles.
Grupo de aplicaciones de IIS: cambiar las configuraciones programáticas