2009-03-05 4 views
0

네트워크의 여러 서버에서 여러 IIS 설치를 관리 할 수있는 작은 웹 응용 프로그램을 작성하는 중입니다. 도메인 컨트롤러가 없습니다.ADSI/IIS 관리 및 ASP.NET 위장

win32 API와 해당 LogonUser 메서드를 사용하는 작은 가장 컨트롤러를 작성했습니다. 그런 다음 System.DirectoryServices와 IIS ADSI 공급자를 사용하여 새 사이트를 만듭니다.

나는 다음과 같은 루틴 (가독성을위한 일반 텍스트 문자열 일부 값을 교환) 한 :

  if (impersonationSvc.ImpersonateValidUser("[email protected]", String.Empty, "PASSWORD)) 
      { 


      string metabasePath = "IIS://" + server.ComputerName + "/W3SVC"; 
      DirectoryEntry w3svc = new DirectoryEntry(metabasePath, "Administrator", "PASSWORD"); 

      string serverBindings = ":80:" + site.HostName; 
      string homeDirectory = server.WWWRootNetworkPath + "\\" + site.FolderName; 


      object[] newsite = new object[] { site.Name, new object[] { serverBindings }, homeDirectory }; 

      object websiteId = (object)w3svc.Invoke("CreateNewSite", newsite); 
      int id = (int)websiteId; 

      impersonationSvc.UndoImpersonation(); 
     } 

내가 웹 응용 프로그램이 (SRV6)에서 호스팅하는 서버를 사용하여이 루틴 작품. 새 사이트가 만들어집니다. 내가 예를 들어 SRV5를 사용하는 경우

, 우리의 네트워크에있는 다른 서버는 (아무 도메인 포함), ImpersonateValidUser 작동의하여 DirectoryEntry가 생성되지만 w3svc.Invoke 다음과 같은 오류와 함께 실패합니다

[COMException (0x80070005입니다) : 액세스

System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) +377678 
System.DirectoryServices.DirectoryEntry.Bind() +36 
System.DirectoryServices.DirectoryEntry.get_NativeObject() +31 
System.DirectoryServices.DirectoryEntry.Invoke(String methodName, Object[] args) +53 

...

사람은 내가이 문제를 해결할 수있는 방법을 알고있다] 거부?

답변

1

이 상황에서 가장을 사용할 수 없습니다. 명의를 도용 한 계정에 로컬 시스템에 로그인 정보가 필요합니다.

웹 서버가 도메인의 일부가 아닌 경우 웹 서비스에 대한 Tant102의 아이디어가 유일한 방법이라고 생각합니다.

+0

너는 맞다 .. 너무 많은 커피 – kitsune

0

SRV5의 이벤트 로그에서 해당 서버에 연결할 때 어떤 권한이 사용되는지 확인합니다. 보안 로그에서 실패를 기록하도록 그룹 정책을 변경해야 할 수 있습니다.

이러한 종류의 작업을 수행하는 로그인 및/또는 IP 제한 사항에 의해 보호되는 서버에서 웹 서비스를 설정하는 것이 더 쉬운 것으로 들립니다.