IIS 7.5 не может получить доступ к файлу из управляемого кода
Вопрос
Я работаю над проектом, который нажимает, когда-то развернуто с веб-сервера 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());