Aggiungi riferimento al servizio Web da dietro un server proxy
-
29-10-2019 - |
Domanda
Sto usando VS2010. In una semplice app console provo ad aggiungere un riferimento al servizio a http://***/service1.asmx
, Old ASMX Service. Il mio computer è dietro un server proxy, quindi ricevo un errore:
"Il server remoto ha restituito una risposta imprevisto: (407) Autenticazione proxy richiesta."
Quando sto usando lo strumento WSDL non riesco a definire il numero di porta del server proxy e ricevo messaggio quel server, per Examle 10.0.0.3:80, non ho risposto, ma devo specificare la porta 8080 e non so come. Come potrei creare un riferimento?
Soluzione
Dai un'occhiata ai collegamenti seguenti per specificare l'indirizzo proxy e la porta del server quando si aggiunge un riferimento Web.
http://msdn.microsoft.com/en-us/library/bb628649.aspx
http://msdn.microsoft.com/en-us/library/03seed2h.aspx
Per aggiungere un riferimento a un ASMX
Fare clic con il tasto destro sull'app console e selezionare Aggiungi riferimento al servizio.
Fare clic sul pulsante avanzato e inserire l'indirizzo ASMX nella barra degli indirizzi. Fai clic sul pulsante verde accanto ad esso per scoprire ASMX.
Dagli un nome e fai clic su Aggiungi rif.
AGGIORNAMENTO: prova ad aggiornare la configurazione Web/ app config e aggiungi;
<system.net>
<defaultProxy>
<proxy usesystemdefault="True" proxyaddress="http://[your proxy address and port number]" bypassonlocal="True"/>
</defaultProxy>
</system.net>
Altri suggerimenti
Ho trascorso quasi 50 ore a trovare il problema, non sono riuscito a trovare da nessuna parte sul web questa semplice soluzione.
Nella sezione "Configurazione" in web.config Aggiungi questo:
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true"></defaultProxy>
</system.net>
Quindi funziona come un fascino!
Puoi anche farlo dal codice dietro:
serviceConnection = new WebService1();
serviceConnection.Proxy = System.Net.HttpWebRequest.GetSystemWebProxy();
serviceConnection.Proxy.Credentials = CredentialCache.DefaultCredentials;
Funziona bene !!.
Se è necessario consumare dalla posizione HTTPS, aggiungi questa configurazione:
<message clientCredentialType="Certificate" algorithmSuite="Default" />
Aggiunta del riferimento:
Assicurati di aggiungere il riferimento in questo modo. Devi fare clic su "Add Service Reference
", vai a "Advanced
"E infine fare clic su"Add Web Reference
".
Quindi aggiungi quanto segue:
http://***/service1.asmx
Per port 8080
usate:
http://***:8080/service1.asmx
Imposta il proxy per il tuo servizio Web:
Per assicurarsi che il servizio Web stia utilizzando il tuo Internet Explorer proxy
Puoi aggiungere quanto segue al tuo Web Service
oggetto sull'applicazione client.
webService1.Proxy = WebRequest.GetSystemWebProxy();
Puoi anche impostare manualmente il proxy:
webService1.Proxy = new WebProxy("hxxp://my-proxy-settings:8080/");
Ntlm
Se usi NTLM, probabilmente dovrai assicurarti di utilizzare anche le credenziali predefinite sul progetto del tuo client. Puoi facilmente farlo trasmettendolo quando crei il Web Serivce utilizzando UseDefaultCredentials
impostato true
.
public webService _webService = new webService() { UseDefaultCredentials = true };
Puoi anche disabilitare l'autenticazione NTLM per il tuo progetto di servizio web. Puoi farlo sotto Project Properties -> Web
. Se non controlla questa opzione, dovresti essere in grado di aggiungere il servizio Web senza dover autenticare.
Non riesco a creare automaticamente riferimento al servizio Web utilizzando VS2010. Decido di utilizzare lo strumento wsdl.exe e nei parametri denominati /parametri passano il file XML con credenziali del server proxy
wsdl.exe http: // servizio Uri /Service1.Asmx /Parameters:c:TempwsdlParameters.xml
Wsdl.exe genera un file service1.cs (impostazione predefinita). Aggiungo questo file al mio progetto e lo uso in questo modo:
WebProxy wp = new WebProxy(@"YourProxyServer",ProxyPort);
wp.Credentials = new NetworkCredential("USERNAME", "PASSWORD");
Service1 service1 = new Service1();
service1.Proxy = wp;
service1."YourServiceMethod"();