2009-11-04 4 views
6

Ich habe ein Client-Programm, das einen Web-Service verbraucht. Es funktioniert ziemlich gut in einer Reihe von Installationen. Jetzt habe ich eine Situation, in der ein neuer Kunde sich über einen Proxy-Server mit dem Internet verbindet und der Versuch meines Programms, auf den Web-Service zuzugreifen, den Fehler "HTTP-Status 407: Proxy-Authentifizierung erforderlich" erhält.Verwenden eines Web-Service über einen Internet-Proxy-Server unter Verwendung eines WCF-Clients in C#; Proxy-Server-Authentifizierung bereitstellen

Ich dachte, dass all das Konfigurieren von Internetzugang, einschließlich Proxy-Server-Adresse, würde Portnummer und die Authentifizierung in der Systemsteuerung auf Internetoptionen durchgeführt werden, und dass ich nicht darüber im Code kümmern, oder sogar in der app.config des Web-Service-Clients.

Habe ich es alles falsch?

Was ich in der Zwischenzeit getan habe, ist dem Benutzer die Möglichkeit geben, die Proxy-Benutzername und das Passwort eingeben und dann in meinem Code zu konfigurieren ich Folgendes tun:

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

Aber ich weiß nicht, dass dies das Richtige ist. Weil es scheint, dass die obigen ClientCredentials sich auf die Web-Service-Bindung/-Sicherheit beziehen, nicht auf den Internet-Proxy-Server.

Ich glaube, ich es beim Kunden versuchen kann, aber ich würde lieber sicher sein, was ich zuerst mache.

Antwort

6

fand ich heraus, wie dies zu tun, mit Hilfe eines Teilnehmers zu einem anderen Forum, das in der Aufregung der alle möglichen Dinge versucht, ich vergessen habe. Also vielen Dank an die jetzt vergessene Person.

Hier ist der Code, der am Ende gearbeitet (in geeigneter Weise verkleidet, sondern gibt die richtige Idee):

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; 
+2

Was, wenn der Web-Service seine eigenen Anmeldeinformationen erfordert, wissen Sie, wie sie zusammen mit dem Proxy hinzufügen Anmeldung? –

+0

Diese Lösung arbeitet, wenn der Dienst und Proxy die gleichen Anmeldeinformationen benötigen, aber falls beide erfordern Anmeldeinformationen des eigenen dann, wie die Anmeldeinformationen einzustellen. Im Falle von NTLM authentifizierten Proxy, welche Änderungen vorgenommen werden müssen? – wintersolider

+0

@net_prog und ajay: Es tut mir leid, ich kann das nicht wirklich beantworten, ohne eine ganze Menge Forschung zu betreiben. Ich habe es geschafft, meine Lösung vor fünf Jahren zurück zu bekommen, und seitdem habe ich nie wieder so etwas gesehen. – Peter