2011-09-12 5 views
9

Sto usando vs2010. In una semplice app per console, provo ad aggiungere un riferimento al servizio http://***/service1.asmx, vecchio servizio asmx. Il mio computer è protetto da un server proxy, così ottengo un errore:aggiungi il riferimento al servizio web da dietro un server proxy

"Il server remoto ha restituito una risposta imprevista: (407) Proxy Authentication Required".

Quando im utilizzando lo strumento WSDL non riesco a definire il numero di porta del server proxy e ottengo il messaggio che di server, per examle 10.0.0.3:80, non ha risposto, ma ho bisogno di specificare 8080 porto e non so Come. Come potrei creare un riferimento?

risposta

7

Date un'occhiata ai link che seguono 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

  1. Fare clic destro sulla console app e selezionare Aggiungi riferimento al servizio.

  2. Fare clic sul pulsante avanzato e immettere l'indirizzo asmx nella barra degli indirizzi. Fare clic sul pulsante verde accanto ad esso per scoprire l'asmx.

  3. Assegnare un nome e fare clic su aggiungi rif.

Aggiornamento: provare ad aggiornare config Web/config dell'app e aggiungere;

<system.net> 

<defaultProxy> 
<proxy usesystemdefault="True" proxyaddress="http://[your proxy address and port number]" bypassonlocal="True"/> 

</defaultProxy> 

</system.net> 
+0

quando faccio quindi ho ricevuto un errore L'operazione non è valida a causa dello stato attuale dell'oggetto. – Nikita

+0

Ho aggiornato la mia risposta, fammi sapere se questo aiuta. – WooHoo

+0

Ho cercato di aggiungere queste impostazioni per app.config ed è ancora verificato l'errore. Quando aggiungo un riferimento web posso vedere la descrizione del servizio. Devo collegamenti ipertestuali a 2 metodi di servizio. Inoltre configuro le opzioni di IE per il proxy. – Nikita

3

aggiungendo il riferimento:

Assicurarsi che si sta aggiungendo il riferimento in questo modo. È necessario fare clic su "Add Service Reference", andare su "Advanced" e infine fare clic su "Add Web Reference".

quindi aggiungere il seguente:

http://***/service1.asmx 

Per port 8080 si utilizza:

http://***:8080/service1.asmx 

Imposta il proxy per il vostro servizio Web:

Per assicurarsi che il servizio Web è usando il tuo Internet Explorer proxy puoi aggiungere quanto segue al tuo oggetto Web Service sul tuo client ap plicatura.

webService1.Proxy = WebRequest.GetSystemWebProxy(); 

È possibile anche impostare il proxy manualmente:

webService1.Proxy = new WebProxy("hxxp://my-proxy-settings:8080/"); 

NTLM

Se si utilizza NTLM probabilmente è necessario assicurarsi di utilizzare le credenziali predefinite del client progetto pure. È possibile farlo facilmente passandoci sopra durante la creazione di Web Serivce utilizzando UseDefaultCredentials impostato su true.

public webService _webService = new webService() { UseDefaultCredentials = true }; 

È inoltre possibile disabilitare l'autenticazione NTLM per il proprio progetto di servizio Web. È possibile farlo in Project Properties -> Web. Se deselezioni questa opzione dovresti essere in grado di aggiungere il servizio Web senza dover autenticare.

http://msdn.microsoft.com/en-us/library/aa378749.aspx

+0

UPD: servizio web, che ho cercando di utilizzare nella mia console app ha ottenuto l'autenticazione anonima. Nella mia app per console non riesco a trovare Proprietà progetto -> Web. – Nikita

+0

Questo sarebbe sotto il tuo servizio Web, e non sotto il client. – eandersson

+0

"È inoltre possibile disabilitare l'autenticazione NTLM per il progetto del servizio Web. È possibile farlo in Proprietà progetto -> Web. Se si deseleziona questa opzione, si dovrebbe essere in grado di aggiungere il servizio Web senza dover eseguire l'autenticazione." - Come ho già detto in precedenza, il servizio web ha autenticazione anonima. Così posso aprire la pagina del servizio web tramite il mio browser. Quando apro il servizio uri usando il browser, esso (browser) mi mostra una finestra per inserire nome utente e password. Fornisco solo le credenziali del server proxy. – Nikita

2

Impossibile creare automaticamente il riferimento del servizio Web utilizzando vs2010. decido di utilizzare lo strumento wsdl.exe, e nel parametro di nome/parametri passano file XML con le credenziali del server proxy

wsdl.exe http://service uri/Service1.asmx /parameters:c:\temp\wsdlparameters.xml

WSDL.exe genera un file Service1.cs (predefinito). Aggiungo questo file al mio progetto e usare in questo modo:

WebProxy wp = new WebProxy(@"YourProxyServer",ProxyPort); 
wp.Credentials = new NetworkCredential("USERNAME", "PASSWORD"); 
Service1 service1 = new Service1(); 
service1.Proxy = wp; 
service1."YourServiceMethod"(); 
+0

Sono contento che siamo arrivati ​​alla fine. – WooHoo

+0

Hai preso uno sguardo al mio ultimo commento? E * deve * farlo automaticamente per voi, in base alle impostazioni di IE. – eandersson

+0

non so che altro per configurare per farlo funziona automaticamente. Forse la nostra procura bloccare un certo tipo di traffico, ma penso che il sufficiente per aggiungere riferimento http. – Nikita

26

ho trascorso quasi 50 ore trovare il problema, non riusciva a trovare ovunque sul web questa semplice soluzione.

Sotto la sezione "Configurazione" nel web.config aggiungere questo:

<system.net> 
    <defaultProxy enabled="true" useDefaultCredentials="true"></defaultProxy> 
</system.net> 

Poi funziona come un fascino!

È anche possibile farlo dal codice dietro:

serviceConnection = new WebService1(); 
serviceConnection.Proxy = System.Net.HttpWebRequest.GetSystemWebProxy(); 
serviceConnection.Proxy.Credentials = CredentialCache.DefaultCredentials; 

Opere bella !!.

Se è necessario consumare dalla posizione HTTPS aggiungere questa configurazione:

<message clientCredentialType="Certificate" algorithmSuite="Default" /> 
+2

+1 Gem! semplice e lavorato. – HockeyJ

+0

che classe non il membro 'serviceConnection.Proxy' appartiene? –

+0

soluzione perfetta, in realtà ho volevo evitare impostazioni proxy di default, ho copiato la tua idea e proxy disattivato in config