如何通过代码还原到IIS 7(或更高版本)上应用程序的父处理程序映射
本文关键字:版本 应用程序 映射 程序 处理 高版本 还原 代码 何通过 IIS | 更新日期: 2023-09-27 18:01:06
可以通过以下步骤手动恢复应用程序到父级的处理程序映射:
- 在IIS管理控制台上选择应用程序
- 双击处理程序映射
- 在"操作"窗格上单击"还原为父对象">
有没有一种方法可以通过编程实现相同的任务(appcmd.exe、VBScript、C#…(?
注:如果已经为应用程序定义了自定义设置,aspnet_regiis-i命令将不起作用。到目前为止,我找到的唯一方法是从IIS中删除应用程序,然后通过代码重新添加它。
我有一项不幸的任务,要将几个IIS6服务器迁移到IIS8.5。我上周的试运行效果很好,只是使用web部署来复制所有内容。我只有几个恼人的问题,通过修复一两个网站很容易解决。我将IIS备份恢复到上周运行web部署之前,然后重新运行web部署以像上周一样将所有内容复制回来(由于自上周以来创建了几个新网站(。令我震惊的是,当您在处理程序映射的操作页面上恢复到父级时,我遇到了所有可怕的错误消息。
由于有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 ");
}
}
}
}
以下适用于该问题:
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();
}
}
}