2009-10-06 9 views
2

Je travaille sur un site Web, dans lequel je suis en train de récupérer des données XML à partir d'une URL externe, en utilisant le code suivant407 Authentification proxy requise

WebRequest req = WebRequest.Create("External server url"); 
req.Proxy = new System.Net.WebProxy("proxyUrl:8080", true); 
req.Proxy.Credentials = CredentialCache.DefaultCredentials; 
WebResponse resp = req.GetResponse(); 
StreamReader textReader = new StreamReader(resp.GetResponseStream()); 
XmlTextReader xmlReader = new XmlTextReader(textReader); 
XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load(xmlReader); 

Ce code fonctionne très bien sur mon PC de développement (Windows XP .Net 3.5)

Mais quand je déploie ce code à IIS (deux à Windows XP et à Windows server 2003), il me donne l'erreur suivante

« Le serveur distant a renvoyé une erreur: (407) authentification proxy requise "

Parfois, il me donne

"Le serveur distant a renvoyé une erreur: (502) Bad Gateway."

code suivant est de mon web.config

<system.net> 
    <defaultProxy> 
     <proxy usesystemdefault="False" proxyaddress ="http://172.16.12.12:8080" bypassonlocal ="True" /> 
    </defaultProxy> 
    </system.net> 

S'il vous plaît aidez-moi?

[Modifier] Même quand je lance le site Web pour devlopment PC, mais à travers moi IIS il donne l'erreur « Le serveur distant a renvoyé une erreur: (407) Authentification proxy requise. »

Mais quand je lance le site web du serveur Microsoft Devlopment, il fonctionne très bien

Répondre

1

-t-il fonctionner lorsque vous modifiez l'extrait dans web.config à:

<system.net> 
    <defaultProxy useDefaultCredentials="true"> 
     <proxy usesystemdefault="False" proxyaddress ="http://172.16.12.12:8080" bypassonlocal ="True" /> 
    </defaultProxy> 
</system.net> 
+0

Le changer pour quoi? –

+0

@Mohit, Déjà j'écris CredentialCache.DefaultCredentials; à l'intérieur du code source, donc je ne pense pas que cela fasse une différence? –

0

Ceci est probablement causé par le compte que IIS s'exécute sous ne pas avoir les autorisations appropriées pour passer à travers le proxy d'authentification. Lorsque vous l'exécutez sur votre PC de développement, vous l'exécutez en tant que votre connexion, qui, je suppose, a les autorisations pour passer à travers le proxy. Lors de l'exécution dans IIS, il ne s'exécute pas comme vous et ne peut donc probablement pas passer à travers le proxy. Vous pouvez accorder à l'utilisateur IIS des autorisations pour passer à travers le proxy (qui ne fonctionnera probablement pas dans un environnement de domaine car l'utilisateur IIS sera un utilisateur local de la machine) ou configurer votre application pour qu'elle s'exécute en tant que réseau utilisateur avec des autorisations pour passer à travers le proxy. Ceci peut être fait soit en faisant fonctionner IIS en tant qu'utilisateur de domaine (je ne recommanderais pas cette approche), soit en configurant votre application pour qu'elle fonctionne en tant qu'utilisateur de domaine en utilisant web.config (voir article this pour plus d'informations sur la façon de le faire).

7

@Mohit Agarwal

Un grand merci pour ce qui suggère d'ajouter 'UseDefaultCredentials = "true"', tu es une star!

J'ai essayé d'obtenir la bibliothèque .NET pour l'exemple de l'API Google Data API pendant des semaines sans succès. L'ajout de votre suggestion a résolu mon problème et j'obtiens maintenant une connexion à la place de 407 Authentification par mandataire requise.

speadsheet.exe.le contenu de configuration doivent être:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.net> 
    <defaultProxy useDefaultCredentials="true"> 
     <proxy usesystemdefault="true"/> 
    </defaultProxy> 
    </system.net> 
</configuration> 

Dans mon cas, pas comme Google Suggest:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
<system.net> 
    <defaultProxy> 
    <proxy usesystemdefault="true"/> 
    </defaultProxy> 
</system.net> 
</configuration> 

http://code.google.com/p/google-gdata/wiki/WebProxySetup

1

Sous l'élément racine <configuration> dans app.config ou Web.config:

<system.net> 
    <defaultProxy useDefaultCredentials="true"> 
    <proxy usesystemdefault="True"/> 
    </defaultProxy> 
</system.net> 
1

Cela pourrait être utile pour quelqu'un Si vous trouvez cela via Google, vous pouvez le mettre dans les applications .NET qui n'ont pas encore leur propre fichier AppName.exe.config (ou vous pouvez le modifier si c'est le cas). Nous utilisons NextGen EPM (ordonnancement médical/facturation) et leur système de traitement des cartes de crédit ne cesse de se bloquer sur notre serveur proxy, car il ne passerait pas les informations d'identification. J'ai fait un fichier EXEName.config (NextGenEPM.exe.config dans ce cas) contenant l'extrait ci-dessus:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.net> 
    <defaultProxy useDefaultCredentials="true"> 
     <proxy usesystemdefault="true"/> 
    </defaultProxy> 
    </system.net> 
</configuration> 

succès! Cela m'a permis de résoudre le problème sans avoir à fouiller dans notre serveur proxy, qui est fermement configuré pour exiger une authentification et nous préférons ne pas compromettre cela.

0

Nous avons longtemps lutté avec ce problème et mis à jour notre app.config pour utiliser les informations d'identification par défaut comme spécifié dans les réponses ci-dessus. Cependant, cela ne fonctionnait toujours pas! Suite à beaucoup de douleur, nous avons découvert que notre app.config n'était pas automatiquement inclus avec notre application click une fois. Une erreur simple a provoqué une épave extrême de la tête !!!

1

Essayez celui-ci si vous souhaitez spécifier les détails du proxy

<?xml version="1.0" encoding="utf-8" ?> 
    <configuration> 
      <system.net> 
       <defaultProxy enabled="true" useDefaultCredentials="true"> 
       <proxy proxyaddress="http://<ProxyServer>:<port>" 
         usesystemdefault="False" 
         bypassonlocal="True" 
         autoDetect="False" /> 
       </defaultProxy> 
      </system.net> 
</configuration> 

Cheers!

Questions connexes