2009-05-13 4 views
7

웹 서비스 (XML SOAP 서비스)를 사용할 응용 프로그램 (C#)에 기능을 추가해야합니다.프록시 서버 뒤에서 웹 서비스 호출

이제이 응용 프로그램은 프록시 서버가있는 회사 환경에서 사용할 수 있습니다.

SOAP 서비스는 HTTP 프로토콜을 사용하므로 일반적으로 열린 포트 80을 사용해야한다는 것을 알고 있습니다. 응용 프로그램에서 특별한 코딩없이 웹 서비스를 사용할 수 있습니까? 그렇지 않으면 프록시 설정이나 다른 문제를 감지하는 특수 코드를 작성해야합니다.

EDIT : Webservice는 인터넷에서 공개적으로 사용 가능한 서비스입니다. 동일한 네트워크에 있지 않습니다.

답변

6

승인. 그래서 몇 가지 실험을했는데 프록시 서버 뒤에서 작동하도록 코드를 작성해야합니다.

그래서 실제로 사용자의 프록시 서버 정보를 요청 드릴 다운 한 후 다음과 같이 프록시 서버에 대한 서비스 프록시 클래스를 구성 (나는 더 나은 솔루션을 선호했을 있지만) : 나는 테스트를 썼다

 
var networkCredentials = new NetworkCredential ("username", "password", "domain"); 
WebProxy myProxy = new WebProxy ("W.X.Y.Z:NN", true) {Credentials = networkCredentials}; 
var service = new iptocountry { Proxy = myProxy }; 
string result = service.FindCountryAsString ("A.B.C.D"); 

무료 웹 서비스 인 IP To Country을 사용합니다.

위 코드를 사용하면 웹 서비스를 성공적으로 사용할 수 있습니다.

+1

구성 요소에서 위의 작업을 수행 할 수 없습니까? –

+0

나는 (config 파일이 아님) 코드를 사용하려고했지만 작동하지 않았다. 사실이 서비스를 사용하려는 응용 프로그램은 Windows 응용 프로그램입니다. 정말 중요하지 않습니까? – Hemant

-1

웹 서비스가 웹 서비스를 호출하는 클라이언트와 동일한 내부 네트워크에 있으면 프록시를 통과해서는 안됩니다.

+0

번호 Webservice를 인터넷에 공개 서비스입니다. 동일한 네트워크에 있지 않습니다. – Hemant

-1

웹 트래픽 (포트 80)이 허용되는 한 특별한 작업을 수행하지 않아도됩니다. 라우터/프록시 서버의 관점에서 웹 서비스 호출은 다른 HTTP 트래픽과 동일합니다.

10

기본적으로 포트 80을 사용하므로 더 이상 코딩 할 필요가 없습니다.

당신이 어떤 종류의 프록시를 통해 이동해야하는 경우, 당신이 할 필요가 당신의 Web.config에 다음을 추가한다 :이를 사용하여 당신은 또한 코드를 통해 그것을 할 수

<system.net> 
    <defaultProxy> 
     <proxy proxyaddress="http://yourproxyserver:80" /> 
    </defaultProxy> 
    </system.net> 

을 :

WebRequest.DefaultWebProxy = new WebProxy("http://yourproxyserver:80/",true); 
5

inbuilt 코드 (WebClient, WCF, HttpWebRequest 등)는 모두 WinHTTP 구성을 사용하여 프록시 구성을 얻습니다. WinHTTP가 프록시에 대해 알도록 구성하기 만하면됩니다.

XP에서,이는 다음과 같습니다

사용자의 IE 프록시 설정에서 설정을 가져
proxycfg -u 

(WinInet이). 등 비스타 /에

, 당신은

netsh winhttp 

(와 "수입"과 같은 몇 가지 하위 명령)

검증되지 않은,하지만 시도 사용, 그 후

netsh winhttp import proxy source=ie 

하여 .NET 코드를 IE 등을 사용하기 위해 사용이 이미 구성된 프록시를 통해 모두 작동해야합니다.

+1

코드를 통해 위에서 수행 할 수 있습니까? 그 이유는 웹 서비스에 액세스해야하는 응용 프로그램이 Windows 양식 응용 프로그램이며 일련의 컴퓨터에서 실행될 수 있기 때문입니다. 위의 단계를 수행하도록 사용자에게 요청하는 것은 실현 가능하지 않습니다. – Hemant

7

당신은 당신이 로컬 컴퓨터에서 기본 설정을 사용할 수 있습니다

System.Net.ServicePointManager.Expect100Continue = false; 
wsclient.Proxy= System.Net.HttpWebRequest.GetSystemWebProxy(); 
wsclient.Proxy.Credentials = CredentialCache.DefaultCredentials;  

와의 app.config에서

이 구성을 추가

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.net> 
    <settings> 
     <servicePointManager expect100Continue="false" /> 
    </settings> 
    </system.net> 
</configuration>