2012-01-04 18 views
15

Ho creato una semplice app WinForms che utilizza il servizio web gratuito http://www.webservicemart.com/uszip.asmx. Ma questa applicazione non riesce a utilizzare il funzionamento del servizio con l'errore:Client WCF - 407 Autenticazione proxy richiesta durante l'esecuzione di webservice

The remote server returned an unexpected response: (407) Proxy Authentication Required (The ISA Server requires authorization to fulfill the request. Access to the Web Proxy service is denied)

codice che crea proxy e innesca il funzionamento del servizio:

ChannelFactory<ServiceReference1.USZipSoap> proxy = new ChannelFactory<ServiceReference1.USZipSoap>("USZipSoap"); 
ServiceReference1.USZipSoap client = proxy.CreateChannel(); 
string str = client.ValidateZip("12345"); 
MessageBox.Show(str); 

È questo il problema con una rete della mia azienda o questo è un proxy sul lato di webservicemart.com?

Ho cercato un sacco di informazioni su come modificare i file di configurazione, creare un'associazione personalizzata, ecc. Ma sento la mancanza di una comprensione più basilare ...
Se questo errore riguarda il server ISA della nostra rete aziendale, allora che configurazione dovrei fare a ISA Server per non impedirmi di utilizzare webservices esterni?

+1

Sì, è un problema con il proxy nella rete locale. Mostra la tua configurazione di binding e controlla anche se hai configurato il proxy in Internet Explorer. –

+0

Ho appena preparato la mia configurazione, ma era troppo grande per adattarsi alle dimensioni dei commenti e ho dovuto affrontare restrizioni che dicevano che non posso rispondere alle mie domande.
Ma comunque ... Ho davvero configurato il proxy nelle impostazioni del mio browser.
Ho avuto qualche progresso dopo aver cambiato useDefaultWebProxy da true a false. E ora ho EndpointNotFoundException con messaggio "Non c'era nessun ascolto endpoint su http://www.webservicemart.com/uszip.asmx che poteva accettare il messaggio, spesso causato da un indirizzo errato o un'azione SOAP. Vedi InnerException, se presente , per ulteriori dettagli." –

+0

E InnerException di tipo System.Net.WebException con messaggio "Il nome remoto non può essere risolto: 'www.webservicemart.com'" –

risposta

43

Nella configurazione di binding assicurarsi che useDefaultWebProxy sia impostato su true - utilizzerà la configurazione trovata in IE. Nel file di configurazione aggiungere seguente frammento di default per garantire le credenziali vengono utilizzate per l'autenticazione sul server proxy:

<system.net> 
    <defaultProxy useDefaultCredentials="true" /> 
</system.net> 
+0

Funziona! Grazie mille! :) –

+0

È interessante notare che questo non sembra essere uguale all'impostazione della proprietà sul proxy predefinito. –

+0

@VincentHubert E 'ancora più interessante sapere cosa non è lo stesso e non avere commenti appesi lì –

1

Sembra che tutto il traffico della tua azienda venga reindirizzato tramite un proxy. Puoi navigare sul servizio web dal tuo IE e vedere il suo wsdl e invocare la pagina di test per vedere alcuni risultati. Se questo è il caso allora provare ad aggiungere la sezione basso nella web.config:

<system.net> 
<defaultProxy>  
<proxy proxyaddress="<your proxy address>" bypassonlocal="true" /> 
</defaultProxy> 
</system.net> 

È possibile trovare l'indirizzo proxy dalle impostazioni del vostro IE.

NOTA: quando ci si sposta in ambienti diversi, è necessario assicurarsi che lo stesso caso sia necessario per rimuovere la configurazione precedente.

+0

Grazie mille per la risposta. Ho appena fatto dei progressi nella risoluzione di questo problema.Ho cambiato useDefaultWebProxy da true a false e dopo sembra che abbia passato la mia autenticazione proxy. Ma ho ancora altre eccezioni che dicono che "Non c'era nessun endpoint in ascolto su http://www.webservicemart.com/uszip.asmx che potesse accettare il messaggio." Ho anche provato un altro servizio web gratuito e ho appena ricevuto esattamente lo stesso errore. –

+0

Ho provato ad accedere al servizio web di cui sopra e funziona perfettamente. Se hai bisogno di aiuto, pubblica un po 'di aggiornamenti e prova a darti una mano. – Rajesh

2

Questo ha funzionato per me ... la sostituzione 10.1.0.50 e il numero della porta con il IP del server proxy

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

Sto usando @Ladislav Mrnka answare, ma ha funzionato anche per me. – MFedatto

0

A volte nel futuro.

WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials; 
Problemi correlati