64 votes

Est-il possible de spécifier des informations d'identification de proxy dans votre web.config?

Je dois configurer un site Web pour accéder à un service Web sur un autre ordinateur, via un proxy. Je peux configurer le site Web pour utiliser un proxy, mais je ne trouve pas de moyen de spécifier les informations d'identification requises par le proxy. Est-ce possible? Voici ma configuration actuelle:

 <defaultProxy useDefaultCredentials="false">
    <proxy usesystemdefault="true" proxyaddress="<proxy address>" bypassonlocal="true" />
</defaultProxy>
 

Je sais que vous pouvez le faire via du code, mais le logiciel utilisé par le site Web est un système de gestion de contenu à code source fermé. Je ne peux donc pas le faire.

Y a-t-il un moyen de faire ça? MSDN ne m'aide pas beaucoup ..

108voto

Jerome Laban Points 1856

Oui, il est possible de spécifier vos propres informations d'identification sans modifier le code actuel. Il nécessite un petit morceau de code à partir de votre part.

Créer une assemblée appelée SomeAssembly.dll avec cette classe :

namespace SomeNameSpace
{
    public class MyProxy : IWebProxy
    {
        public ICredentials Credentials
        {
            get { return new NetworkCredential("user", "password"); }
            //or get { return new NetworkCredential("user", "password","domain"); }
            set { }
        }

        public Uri GetProxy(Uri destination)
        {
            return new Uri("http://my.proxy:8080");
        }

        public bool IsBypassed(Uri host)
        {
            return false;
        }
    }
}

Ajouter ceci à votre fichier de configuration :

<defaultProxy enabled="true" useDefaultCredentials="false">
  <module type = "SomeNameSpace.MyProxy, SomeAssembly" />
</defaultProxy>

Cette "injecte" un nouveau proxy dans la liste, et parce qu'il y a pas d'informations d'identification par défaut, la classe WebRequest appelle votre premier code et demande vos propres informations d'identification. Vous aurez besoin de placer les assembler SomeAssembly dans le répertoire bin de votre application de gestion.

C'est en quelque sorte un code statique, et pour obtenir toutes les chaînes de caractères comme l'utilisateur, mot de passe et l'URL, vous pouvez soit besoin de mettre en œuvre votre propre ConfigurationSection, ou ajouter des informations dans le AppSettings, qui est beaucoup plus facile.

20voto

Scott Ferguson Points 3418

Alors que je n'ai pas trouvé un bon moyen de spécifier proxy réseau, les informations d'identification dans le web.config, vous pourriez trouver que vous pouvez toujours utiliser un non-codage de la solution, en incluant dans votre site web.config:

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

L'ingrédient clé dans l'obtention de ce, est de changer les paramètres IIS, assurant le compte qui exécute le processus d'accès au serveur proxy. Si votre processus est en cours d'exécution en vertu de l'LocalService, ou NetworkService, alors ce ne sera probablement pas travailler. Les Chances sont, vous aurez besoin d'un compte de domaine.

1voto

questzen Points 1963

Les services d'annuaire / LDAP peuvent être utilisés à cette fin. Cela implique quelques changements au niveau de l’infrastructure, mais la plupart des environnements de production ont cette disposition

0voto

westerdaled Points 3

J'ai le même problème lorsque je permets à mon site principal d'accéder à un flux RSS. Dans mon cas, j'ai un accès APPPool: DOMAIN \ MY_Portal. J'utilise les mêmes paramètres que @scott et @burhaan, mais mon composant WebPart de visionneuse RSS se plaint de l'authentification. Quelque part, je devrai présenter un identifiant codé en dur à IIS et / ou au proxy Web ou écrire un code côté client.

@westerdaled

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X