C# 如何通过代码还原IIS 7(或更高版本)上应用程序的父处理程序映射?
可以通过以下步骤手动将应用程序的处理程序映射还原到父级: 在IIS管理控制台上选择应用程序 双击处理程序映射 在“操作”窗格上单击“还原到父级” 是否有方法通过编程方式实现相同的任务appcmd.exe、VBScript、C 注: 如果已经为应用程序定义了自定义设置,则aspnet_regiis-i命令不起作用。C# 如何通过代码还原IIS 7(或更高版本)上应用程序的父处理程序映射?,c#,iis-7,vbscript,iis-7.5,appcmd,C#,Iis 7,Vbscript,Iis 7.5,Appcmd,可以通过以下步骤手动将应用程序的处理程序映射还原到父级: 在IIS管理控制台上选择应用程序 双击处理程序映射 在“操作”窗格上单击“还原到父级” 是否有方法通过编程方式实现相同的任务appcmd.exe、VBScript、C 注: 如果已经为应用程序定义了自定义设置,则aspnet_regiis-i命令不起作用。 到目前为止,我找到的唯一方法是从IIS中删除应用程序,然后通过代码再次添加它。以下方法可以解决这个问题: using System; using System.Text; using
到目前为止,我找到的唯一方法是从IIS中删除应用程序,然后通过代码再次添加它。以下方法可以解决这个问题:
using System;
using System.Text;
using System.DirectoryServices;
namespace RevertToParentHandlerMappings
{
class Program
{
static void Main(string[] args)
{
string vDirPath = "IIS://localhost/W3SVC/1/ROOT/AppName";
DirectoryEntry vDir = new DirectoryEntry(vDirPath);
vDir.Properties["ScriptMaps"].Clear();
vDir.CommitChanges();
}
}
}
我有一个不幸的任务,将几个IIS6服务器迁移到IIS8.5。我上周的试运行非常好,只是使用WebDeploy复制了所有内容。我只有几个烦人的问题,可以通过修复一两个网站轻松解决。在上周运行web deploy之前,我将IIS备份还原为,然后重新运行web deploy,将所有内容复制回上个工作日,并将其复制到自上周以来创建的几个新网站。令我震惊的是,我遇到了所有可怕的错误消息,当您在处理程序映射的操作页面上还原到父级时,这些错误消息都已修复 由于有570多个站点,而且出于某些疯狂的原因,选择站点、选择处理程序映射、单击还原、回答问题、单击下一个站点并加载它的过程需要18秒。如果我哪怕是一秒钟都不停下来的话,我就要花将近3个小时来处理这个服务器 找到这个话题,我永远感激不尽。我编写了一个快速控制台应用程序,在我所有的网站上运行并恢复到父级。我每天都要花2分钟多一点,2.8小时多一点!我只是想我会分享全部信息,以防其他人遇到这个问题
using System;
using System.DirectoryServices;
using System.Collections;
namespace IISHandlerMappingsRevertToParentAll
{
class Program
{
static void Main(string[] args)
{
if (args == null || args.Length != 3)
{
Console.WriteLine("IISHandlerMappingsRevertToParentAll.exe WebServer UserName Password");
Console.WriteLine("Example: IISHandlerMappingsRevertToParentAll WebServer1 WebServer1\\MyUserName MyPassword");
}
else
{
DateTime dt = DateTime.Now;
int cleared = 0;
using (DirectoryEntry root = new DirectoryEntry("IIS://" + args[0] + "/W3SVC", args[1], args[2], AuthenticationTypes.FastBind))
{
foreach (DirectoryEntry r in root.Children)
{
if (r.SchemaClassName == "IIsWebServer")
{
foreach (DirectoryEntry e in r.Children)
{
if (e.SchemaClassName == "IIsWebVirtualDir")
{
ArrayList ScriptMaps = new ArrayList(e.Properties["ScriptMaps"]);
if (ScriptMaps.Count > 0)
{
Console.WriteLine("Clearing for " + e.Properties["Path"].Value);
cleared++;
e.Properties["ScriptMaps"].Clear();
root.CommitChanges();
}
}
}
}
}
}
Console.WriteLine("Reset " + cleared + " took " + DateTime.Now.Subtract(dt).TotalSeconds + "s ");
}
}
}
}