2010-04-07 4 views
0

Je travaille sur un projet qui est déployé une seule fois à partir d'un serveur Web IIS 7.5. Après l'installation de l'application parente (c'est-à-dire la configuration du site IIS), je suis en mesure d'accéder à l'url du fichier de configuration de l'application click-once depuis une boîte distante. Cependant, quand j'essaie de faire la même chose avec mon application (et l'application stub ci-dessous), je reçois un 401 non autorisé.IIS 7.5 ne peut pas accéder au fichier à partir du code managé

Quelle est la différence entre cliquer sur l'URL d'IE et depuis une application .NET?
Le fichier et le répertoire lui-même ont un contrôle total accordé à tout le monde sur le serveur web pour le moment, et je suis un administrateur sur la boîte. Nous utilisons l'authentification Windows avec NTLM uniquement.

Merci, -Bob

Voici l'application stub qui produit la 401 - Non autorisé lorsque la ligne doc.Load(). Je peux frapper la même URL avec succès à partir d'IE et ouvrez le fichier ...

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

Répondre

1

poser le principe:

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

XMLDocument ne supporte pas les informations d'identification qui passe lors du chargement d'une URL. Au lieu de charger à partir d'un flux WebRequest et définir les informations d'identification sur la demande avant le chargement.

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

XmlDocument doc = new XmlDocument(); 
doc.Load(request.GetResponse().GetResponseStream()); 
+0

qui a fait l'affaire! J'ai remarqué que je ne le faisais pas lors d'un appel webService ultérieur de l'application ... je devais également définir les informations d'identification avec CredentialCache.DefaultCredentials. – Bob