12
votes

Comment puis-je obtenir WebClient (client WebService) pour utiliser automatiquement le serveur proxy par défaut?

J'appelle un service WebService à partir d'une application WinForms. Tout fonctionne bien lorsqu'un serveur proxy n'est pas utilisé, cependant, lorsqu'un proxy est utilisé, l'application se bloque comme au lieu de la réponse XML, elle s'attend à la demande de savon, elle reçoit une page d'erreur HTML disant "Authentification requise".

Il semble que vous puissiez définir la proxy manuellement comme ceci: p> xxx pré>

... Mais dans une certaine mesure, il semble voir le serveur proxy quand même sans strong> en faisant ce qui précède, car l'erreur générée est réalisée du serveur proxy. Il ne semble tout simplement pas ramasser les informations d'identification de connexion à l'authentification Windows à partir de l'ordinateur de l'utilisateur. Comment puis-je le forcer à faire cela? p>

sur ma propre machine Si je simulez ceci à l'aide de FIDDler (et activez l'option «Exiger une authentification proxy»), je reçois une boîte de dialogue Pop Up demandant les informations d'identification de connexion, mais cela ne semble pas se produire sur Machines de mon client (qui utilisent un véritable proxy matérielle - McAfee Web Gateway). P>

Comment puis-je gérer cela? Dois-je fournir une boîte de dialogue pour les utilisateurs de configurer le serveur manuellement ou s'il existe un paramètre pour indiquer au WebClient d'utiliser le proxy par défaut Windows par défaut et les informations d'identification de connexion de l'utilisateur? P>

Mise à jour forte> p>

semble que vous puissiez prendre le serveur proxy à l'aide du code ci-dessous, mais cela ne provoque pas que la boîte de dialogue d'authentification apparaisse dans toutes les situations (fonctionne sur certains PC mais pas sur les autres): P>

IWebProxy defaultProxy = WebRequest.DefaultWebProxy;
if (defaultProxy != null)
{
    defaultProxy.Credentials = CredentialCache.DefaultCredentials;
    client.Proxy = defaultProxy;
}


10 commentaires

Avez-vous examiné le Méthode de Windowssidity.Impersonate < / a>?


Pas sûr que c'est pertinent car mon application est déjà en cours d'exécution comme l'utilisateur local que je pense?


Doh, mon mauvais ... J'ai trop géré avec SQL CLRSPROCS récemment ... "Quand tout ce que vous [utilisez] est un marteau ..."


Comme vous l'avez noté, le WebClient sera défini par le système à l'aide des fichiers de configuration et des paramètres réseau locaux Internet Explorer "- propriété WebClient.Proxy . Si le client n'est pas invité à être invité pour les informations d'identification, c'est-à-dire que c.-à-propos de la configuration de ne pas les demander, ce qui peut être configuré par la classification du site dans IE ou leur proxy ne les oblige pas, éventuellement parce que le site l'application frappe est dans leur domaine déjà?


Éventuellement associé: Stackoverflow.com/Questtions/844467 / ...


Quel est le message d'erreur exact? Quel type d'authentification le serveur proxy utilise-t-il? Si c'est NTLM, il y a quelques astuces que je peux fournir.


@Gonale Non, je n'accepterai pas sa réponse car elle ne fonctionne pas pour moi et n'a aucun effet sur tout pour résoudre mon problème.


Ok bien c'est une bonne raison de ne pas l'accepter;) C'est étrange alors? Pourquoi ça ne marche-t-il pas pour vous? Dès que je l'ai ajouté, cela a commencé à hériter des paramètres de proxy IE.


Parce que cela s'appuie sur les informations d'identification de l'utilisateur dans le cache, ils n'ont jamais été sur un système que j'ai testé sur - même si je ne me suis pas connecté. Je ne sais pas quand les informations d'identification sont dans le cache, mais je viens de trouver qu'ils N'étais pas donc cette solution ne m'a pas aidé.


WebProxy.getDefaultProxy est obsolète.


3 Réponses :


0
votes

Essayez d'abord d'utiliser ceci:

WebProxy proxy = WebProxy.GetDefaultProxy()
client.Proxy = proxy;


1 commentaires

WebProxy.getDefaultProxy est obsolète.



19
votes

Essayez d'ajouter xxx

à votre fichier app.config


1 commentaires

Dans web.config cela vous aide aussi. devrait être placé dans



5
votes
using (WebClient webClient = new WebClient())
{

    webClient.UseDefaultCredentials = true;
    webClient.Proxy = WebRequest.GetSystemWebProxy();
}
this should work

2 commentaires

Ne fonctionne pas pour moi, je reçois toujours "407 authentification proxy requise"


Voir Stackoverflow.com/questions/299940/...