2010-04-07 11 views
0

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

В чем разница между удалением 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); 
    } 

ответ

1

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

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()); 
+0

, который сделал трюк! Отмечено, что я не делал этого при последующем вызове webService из приложения ... должен был установить учетные данные там с CredentialCache.DefaultCredentials. – Bob