2013-02-24 3 views
0

은 수동으로 아래 단계에 따라 부모 응용 프로그램에 대한 핸들러 매핑을 되돌릴 수 :코드로 IIS 7 (또는 그 이상)의 응용 프로그램에 대한 부모 개체 핸들러 매핑을 되돌리려면?

    IIS 관리 콘솔에
  • 응용 프로그램을 선택
  • 두 번 작업 창에서 부모에 처리기 매핑
  • CLIK 되돌리기를 클릭

프로그래밍 방식으로 동일한 작업 (appcmd.exe, VBScript, C# ..)을 달성하는 방법이 있습니까?

참고 : 응용 프로그램에 대해 이미 사용자 정의 설정이 정의되어 있으면 aspnet_regiis -i 명령이 작동하지 않습니다. 지금까지 찾은 유일한 방법은 IIS에서 응용 프로그램을 제거하고 코드로 다시 추가하는 것입니다. 질문에 대한

답변

0

다음 작품 :

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(); 

     } 
    } 
} 
1

내가 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 "); 
      } 
     } 
    } 
}