IIS 7.5 не может получить доступ к файлу из управляемого кода

StackOverflow https://stackoverflow.com/questions/2594862

  •  25-09-2019
  •  | 
  •  

Вопрос

Я работаю над проектом, который нажимает, когда-то развернуто с веб-сервера IIS 7.5. После установки родительской приложения (т. Е. Настройка сайта IIS), я могу ударить URL для файла конфигурации приложения, когда-то щелчка в удаленном поле.
Тем не менее, когда я пытаюсь сделать то же самое из моего приложения (и приложение для заглушки ниже), я получаю 401 несанкционированную.

В чем разница между ударом URL из IE, а из приложения .Net?
Сам файл и каталог имеют полный контроль, предоставленный каждому на веб-сервере в данный момент, и я админ на коробке. Мы используем аутентификацию Windows только с NTLM.

Спасибо, -bob.

Вот приложение для заглушки, которое производит 401 - несанкционированное, когда на линии doc.load (). Я могу успешно ударить один и тот же URL из IE и открыть файл ...

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);
    }
Это было полезно?

Решение

Установить принцип:

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

XMLDocument не поддерживает передачу учетных данных при загрузке с URL. Вместо того, чтобы загрузить из потока WebRequest и установить учетные данные по запросу перед нагрузкой.

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

XmlDocument doc = new XmlDocument();
doc.Load(request.GetResponse().GetResponseStream());
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top