내가 IIS8.5에 여러 IIS6 서버를 마이그레이션하는 불행한 작업을 보내고 있습니다. 지난 주 내 드라이 런 (dry run)은 모든 것을 복사하기 위해 웹 배포를 사용하여 꽤 잘 작동했습니다. 웹 사이트 중 하나 또는 두 개를 수정하여 쉽게 해결할 수있는 잔소리에 불과했습니다. 지난 주에 웹 배포를 실행하기 전에 IIS 백업본을 복원 한 다음 지난주부터 작성한 여러 새 사이트로 인해 지난 주처럼 모든 것을 다시 복사하도록 웹을 배포합니다. 내 충격으로, 핸들러 매핑을위한 작업 페이지에서 부모로 되돌릴 때 수정되는 모든 끔찍한 오류 메시지가 발생했습니다.
이상한 사이트가 570 개 있고 이상한 이유로 사이트 선택, 처리기 매핑 선택, 되돌리기, 질문 응답, 다음 사이트 클릭 및로드 등의 과정을 거치는 데 18 초가 걸립니다. 내가 잠시 멈추지 않는다면이 서버를 돌보기 위해 거의 3 시간이 걸릴 것입니다.
저는이 주제를 찾았다면 정말 감사드립니다. 나는 신속하게 실행하고 모든 사이트에서 부모로 복귀 할 수있는 빠른 콘솔 앱을 작성했습니다. 하루에 2.8 시간 이상 2 분 이상 조금 걸릴거야! 나는 다른 누군가가이 문제에 부딪 힐 경우에 대비하여 모든 것을 공유 할 것이라고 생각했습니다.
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 ");
}
}
}
}