Pergunta

Estou trabalhando em um projeto que é o Click-Once implantado em um servidor da Web do IIS 7.5. Depois de instalar o aplicativo pai (ou seja, configurar o site do IIS), sou capaz de pressionar o URL para o arquivo de configuração do aplicativo Click-Once a partir de uma caixa remota.
No entanto, quando tento fazer a mesma coisa no meu aplicativo (e no aplicativo Stub abaixo), recebo um 401 não autorizado.

Qual é a diferença entre atingir o URL do IE e de um aplicativo .NET?
O próprio arquivo e o próprio diretório têm controle total concedido a todos no servidor da web no momento, e eu sou um administrador na caixa. Estamos usando a autenticação do Windows apenas com NTLM.

Obrigado, -Bob

Aqui está o aplicativo Stub que produz a 401 - não autorizada quando na linha doc.load (). Eu posso atingir o mesmo URL com sucesso do IE e abrir o arquivo ...

static void Main(string[] args)
    {
        Console.WriteLine("Config Test");
        string filename = "http://dev-rs/myClient/myClickOnce/myApp.config.xml";
        Console.WriteLine(filename);
        XmlDocument doc = new XmlDocument();
        doc.Load(filename);
        Console.WriteLine("Loaded");
        Console.WriteLine("Inner Text : " + doc.InnerText);
    }
Foi útil?

Solução

Estabelecer o princípio:

AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);

O XMLDocument não suporta credenciais de passagem ao carregar de um URL. Em vez disso, carregue de um fluxo WebRequest e defina as credenciais na solicitação antes da carga.

WebRequest request = HttpWebRequest.Create(filename);
request.Credentials = CredentialCache.DefaultCredentials;

XmlDocument doc = new XmlDocument();
doc.Load(request.GetResponse().GetResponseStream());
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top