Pergunta

Eu estou no processo de escrever um web pequeno aplicativo que me permita gerenciar várias instalações do IIS em servidores diferentes na nossa rede. Nós não temos nenhum controlador de domínio.

Eu escrevi um controlador de representação pequena que usa a api win32 e seu método LogonUser. Eu, então, usar System.DirectoryServices e o provedor IIS ADSI para criar um novo site.

Eu tenho a seguinte rotina (trocado alguns valores com cordas de texto simples para melhor legibilidade):

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

Esta rotina funciona quando eu uso o servidor do aplicativo web está hospedado em (SRV6). Um novo site é criado.

Se eu usar SRV5 por exemplo, outro servidor na nossa rede (sem domínio), ImpersonateValidUser funciona, o DirectoryEntry é criado, mas w3svc.Invoke falha com o seguinte erro:

[COMException (0x80070005): Acesso negado]

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

...

Alguém sabe como eu poderia resolver isso?

Foi útil?

Solução

Você não pode usar a representação nesta situação. A conta que você está representando necessidades sessão privilégios na máquina local.

Se os seus servidores web não são parte de um domínio, eu acho que a idéia de Tant102 de serviços web é a sua única maneira de ir.

Outras dicas

Gostaria de olhar para o registo de eventos de SRV5 para verificar o que privilégios são usados ??quando você se conectar a esse servidor. Você pode precisar alterar suas políticas de grupo para falhas log no log de segurança.

Parece mais fácil de webservices de configuração em seus servidores, de preferência protegido por logins e / ou restrições de IP, que faz este tipo de operações.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top