문제

저는 네트워크의 다른 서버에서 여러 IIS 설치를 관리 할 수있는 작은 웹 앱을 작성하는 중입니다. 도메인 컨트롤러가 없습니다.

Win32 API 및 Logonuser 메소드를 사용하는 작은 가장 컨트롤러를 작성했습니다. 그런 다음 System.DirectoryServices 및 IIS ADSI 제공 업체를 사용하여 새 사이트를 만듭니다.

다음과 같은 루틴이 있습니다 (더 나은 텍스트 문자열로 일부 값을 교환했습니다).

            if (impersonationSvc.ImpersonateValidUser("Administrator@SRV6", 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를 사용하는 경우 네트워크의 다른 서버 (도메인 없음), 가장하는 ValidUser가 작동하면 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

...

누구든지 내가 이것을 어떻게 해결할 수 있는지 아는 사람이 있습니까?

도움이 되었습니까?

해결책

이 상황에서는 가장 할 수 없습니다. 가장 한 계정은 로컬 컴퓨터의 로그인 권한이 필요합니다.

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

다른 팁

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

서버에서 웹 서비스를 설정하는 것이 쉽고, 이런 종류의 작업을 수행하는 로그인 및/또는 IP 제한에 의해 보호되는 것이 바람직합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top