2012-01-17 3 views
6

webservice를 호출하려고합니다. WPAD 스크립트를 사용하는 프록시를 사용해야합니다. 이 WPAD 스크립트의 URL은 응용 프로그램 배포마다 다릅니다. IE 올바른 proxysettings이 있지만 응용 프로그램이 윈도우 사용자를위한 IE-설정을 알고하지 않도록동적으로 WPAD 스크립트로 WebProxy 사용

, 응용 프로그램, 로컬 시스템 계정으로 실행하는 Windows 서비스로 실행됩니다.

<system.net> 
    <defaultProxy enabled="true" useDefaultCredentials="true" > 
     <proxy autoDetect="True" scriptLocation="http://url.to/wpad.dat"/> 
    </defaultProxy> 
</system.net> 

를하지만이는 사용자가 구성 할 수없는 제한이 다음의 app.config에 다음을 퍼팅

작동합니다. 위의 코드를 (C# -) 코드에서 동적으로 수행하는 방법이 있습니까? 위의 내용이 프록시를 통과해서는 안되는 웹 서비스의 동작을 변경시킬 것이라고 생각됩니다. 나는 유용한 텍스트 발견 http://msdn.microsoft.com/en-us/library/system.net.webproxy.aspx에서

: "(. WPAD 기능을 사용하는 방법을 보여줍니다 예를 들어는 IWebProxyScript 클래스에 대한 설명서를 참조하십시오)"하지만 난 예를 :(발견하지 않았습니다

답변

1

이 문서. 당신은 프록시 세부 사항을 찾을 수있는 기능을 사용할 수 http://www.codeproject.com/Articles/12168/Using-PAC-files-proxy

한 다음 웹 서비스 개체를 구성 : 코드 프로젝트는 특정 URL에 대한 올바른 프록시 정보를 PAC 스크립트를 실행하고 반환 윈도우 API를 사용하는 방법을 보여줍니다 프록시를 직접 변경하거나 WebRequest.DefaultProxy를 변경하십시오.

+0

[link] (http://www.pcreview.co.uk/forums/winhttpgetproxyforurl-t1862181.html)하지만 WPAD는 여러 proxyservers를 반환 할 수 있습니다 (장애 조치 및/또는로드 균형 조정, 링크] (http://en.wikipedia.org/wiki/Proxy_auto-config)). 그런 다음 세미콜론으로 구분하여 반환합니다. "직접"을 반환하는 항목은이 방법을 사용하여 사라지는 것 같습니다. 비록 이것이 올바른 방향의 한 걸음이지만, 그것은 나에게 완전하지 않은 것처럼 보입니다. –

+0

반환 값에 string.split을 사용하여 항목 목록을 얻은 다음 순서대로 시도해 볼 수는 없습니까? 목록이 비어 있으면 프록시를 사용하지 않을 것입니까? – sga101

+0

그게 내가 끝내 준거야. 그러나 나는 그것을 좋아하지 않아 : 를 - 지금은 각 프록시에 대한 WebRequest 클래스를하고 루프를 가지고 내가 을 찾을 수 - 내가 직접 처리하는 방법을 모르겠어요. 나는 빈리스트를 얻는다면 이제는 프록시를 사용하지 않지만 프록시와 직접 리턴하는 예제를 보았 기 때문에 아마 올바른 방법은 아닙니다. - 웹 요청이 시간 초과되는 경우, 나는 그 이유를 알지 못합니다. 프록시 일 수도 있고 다른 일일 수도 있습니다. 그래서 다른 프록시로 요청을 반복합니다. 다른 타임 아웃일까요? 그리고 사용자는 기다립니다 ... - 정말 이것을하고 싶지 않습니다. 나는 OS가 그것을 처리하기를 원한다 ... –

0

IWebProxyScript는 WebProxy 자체에서 내부적으로 사용됩니다.

당신이 WPAD 스크립트에 URL과 함께 WebProxy가 초기화되면, 그것을 전달하는 요청에 대한 올바른 URL을 해결합니다. 해당 WebProxy를 WebRequest로 설정할 수 있으며 요청 대상에 대한 올바른 프록시 URL 설정을 자동으로 처리합니다.

WebRequest request = WebRequest.Create("http://targeturl"); 
request.Proxy = new WebProxy("http://url.to/wpad.dat"); 

또한과 같이 특정 대상에 대해 프록시 URL을 얻을 수 있습니다 :

WebProxy proxy = new WebProxy("http://url.to/wpad.dat");  
Uri proxyUri = proxy.GetProxy(new Uri("http://targeturl")); 

이 PAC 스크립트 작동하지 않습니다.