2009-11-04 3 views
6

웹 서비스를 사용하는 클라이언트 프로그램이 있습니다. 그것은 많은 설치에서 아주 잘 작동합니다. 이제 새로운 고객이 프록시 서버를 통해 인터넷에 연결하고 웹 서비스에 액세스하려는 프로그램의 "HTTP 상태 407 : 프록시 인증 필요"오류가 발생합니다.C#에서 WCF 클라이언트를 사용하여 인터넷 프록시 서버를 통해 웹 서비스를 사용합니다. 프록시 서버 인증 제공

나는 프록시 서버 주소, 포트 번호 및 인증을 포함한 모든 인터넷 액세스 구성이 제어판 인터넷 옵션에서 수행 될 것이라고 생각하고 코드에 대해 걱정하지 않아도됩니다. 웹 서비스 클라이언트의 app.config에 있습니다.

내가 잘못 알고 있니? 내가 그 동안 수행 한 어떤

은 사용자에게 프록시 사용자 이름과 암호를 구성 할 수있는 기회를 제공하고, 다음 내 코드에서 나는 다음을 수행하십시오

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

그러나 나는 모른다 이것이 옳은 일인가. 위의 ClientCredentials는 인터넷 프록시 서버가 아닌 웹 서비스 바인딩/보안을 참조합니다.

나는 고객이 그것을 시도 할 수 있다고 생각하지만 차라리 내가 무엇을하고 있는지 확신하고 싶다.

답변

6

내가 잊어 버린 모든 종류의 것을 시험해보고있는 다른 포럼에 기여한 사람의 도움을 받아이 작업을 수행하는 방법을 알았습니다. 이제 잊어 버린 사람에게 감사드립니다. 프록시와 함께 추가하는 방법을 알고, 웹 서비스는 자신의 자격 증명이 필요

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

어떤 경우 : 여기

은 결국 일을 코드입니다 (적절하게 위장 있지만, 올바른 아이디어를 제공) 로그인? –

+0

이 솔루션은 서비스와 프록시가 동일한 자격 증명을 필요로 할 때 작동하지만 두 가지 경우 모두 자격 증명이 필요하면 자격 증명을 설정하는 방법이 필요합니다. NTLM 인증 프록시의 경우 변경해야 할 사항은 무엇입니까? – wintersolider

+0

@net_prog and ajay : 미안하지만, 많은 연구를하지 않고서는 대답 할 수 없습니다. 나는 5 년 전에 나의 해결책을 일하는 방식으로 되돌려 놓았고 그 이후로 이런 종류의 것을 다시 보지 못했다. – Peter