Il consumo di un servizio web attraverso un server Proxy Internet, utilizzando un client WCF in C #; fornendo l'autenticazione del server proxy

StackOverflow https://stackoverflow.com/questions/1672477

Domanda

Ho un programma client che consuma un servizio web. Funziona abbastanza bene in un certo numero di installazioni. Ora ho una situazione in cui un nuovo cliente si connette a Internet tramite un server proxy, e il tentativo di mio programma per accedere al servizio web ottiene il "stato HTTP 407: Necessaria autenticazione proxy". Errore

ho pensato che tutta la configurazione di accesso a Internet, compreso l'indirizzo del server proxy, numero di porta e l'autenticazione sarebbe stato fatto nel pannello di controllo Opzioni Internet, e che non avrei dovuto preoccuparsi che nel codice, o anche in app.config, del client Web Service.

Ho forse sbagliato tutto?

Quello che ho fatto nel frattempo è dare all'utente la possibilità di configurare il nome utente proxy e la password, quindi nel mio codice ho effettuare le seguenti operazioni:

webServiceClient.ClientCredentials.UserName.UserName = configuredUsername;
webServiceClient.ClientCredentials.UserName.Password = configuredPassword;

Ma non so che questa è la cosa giusta. Perché mi sembra che le ClientCredentials sopra rimanda al servizio web di legame / sicurezza, non al server Internet proxy.

Suppongo che può provare presso il cliente, ma io preferirei essere sicuro di quello che sto facendo prima.

È stato utile?

Soluzione

ho scoperto come fare questa cosa, con l'aiuto di un collaboratore di un altro forum, che nel turbinio di provare ogni sorta di cose che ho dimenticato. Quindi grazie a quella persona ormai dimenticato.

Ecco il codice che ha lavorato alla fine (opportunamente mascherato, ma dà l'idea giusta):

    BasicHttpBinding binding = new BasicHttpBinding("APISoap"); /* APISoap is the name of the binding element in the app.config */
    binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
    binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.Basic;
    binding.UseDefaultWebProxy = false;
    binding.ProxyAddress = new Uri(string.Format("http://{0}:{1}", proxyIpAddress, proxyPort)); 
    EndpointAddress endpoint = new EndpointAddress("http://www.examplewebservice/api.asmx");

    WebServiceClient client = new WebServiceClient(binding, endpoint);

    client.ClientCredentials.UserName.UserName = proxyUserName;
    client.ClientCredentials.UserName.Password = proxyPassword;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top