2009-05-13 18 views
7

Potrzebuję dodać funkcjonalność w aplikacji (C#), która będzie korzystać z usługi sieciowej (usługa XML SOAP).Wywołanie usługi internetowej zza serwera proxy

Teraz ta aplikacja może (i najczęściej) być używana w środowisku korporacyjnym, które ma serwer proxy w miejscu.

Rozumiem, że usługi SOAP używają protokołu HTTP, a zatem powinny używać portu 80, który zwykle jest otwarty. Czy to prawda, że ​​aplikacja może korzystać z usługi sieciowej bez specjalnego kodowania lub czy muszę napisać specjalny kod, aby wykryć ustawienia proxy lub inne problemy, które widzisz?

EDYCJA: Usługa jest publicznie dostępna w Internecie. Nie jest w tej samej sieci.

Odpowiedz

6

OK. Zrobiłem więc kilka eksperymentów i okazało się, że musimy napisać jakiś kod, żeby działał zza serwera proxy. (Choć bym wolała lepsze rozwiązanie)

Więc faktycznie wiercenia w dół prosząc dane serwera proxy od użytkownika, a następnie skonfigurować klasy proxy usługi dla serwera jak poniżej Proxy:

 
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"); 

pisałem test klasy i korzysta z bezpłatnej usługi internetowej IP To Country.

Korzystając z powyższego kodu, mogłem pomyślnie korzystać z usługi internetowej.

+1

Nie można wykonać powyższych czynności w elemencie konfiguracyjnym ? –

+0

Próbowałem użyć kodu (nie pliku konfiguracyjnego), ale nie działało. W rzeczywistości aplikacja, z której miałem zamiar skorzystać z tej usługi jest aplikacją systemu Windows. Nie jestem pewien, czy to ma znaczenie, czy nie. – Hemant

-1

Jeśli usługa sieciowa znajduje się w tej samej sieci wewnętrznej, co klient wywołujący usługę sieci Web, nie powinna ona przechodzić przez serwer proxy.

+0

nr Webservice jest publicznie dostępna usługa w Internecie. Nie jest w tej samej sieci. – Hemant

-1

Dopóki ruch sieciowy (port 80) jest dozwolony, nie trzeba robić nic specjalnego. Z perspektywy routera/serwera proxy połączenia usług internetowych są takie same, jak każdy inny ruch HTTP.

10

Użyje domyślnie portu 80 i nie powinieneś już wymagać dalszego kodowania.

Jeśli trzeba przejść przez pełnomocnika jakiegoś, wszystko co musisz zrobić, to dodać następujące do pliku web.config:

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

Można również zrobić za pośrednictwem kodu za pomocą tego:

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

Kod wbudowany (WebClient, WCF, HttpWebRequest itp.) Wykorzystują konfigurację WinHTTP do uzyskania konfiguracji proxy. Wszystko, co musisz zrobić, to skonfigurować WinHTTP, aby wiedzieć o proxy!

W XP to:

proxycfg -u 

która importuje ustawienia z ustawień proxy użytkownika IE (WinInet).

na Vista/etc, należy użyć

netsh winhttp 

(a niektóre komenda jak "importu")

niesprawdzone, ale spróbuj:

netsh winhttp import proxy source=ie 

Po tym, kodu .NET wszystkie powinny działać za pośrednictwem serwera proxy, który prawdopodobnie został już skonfigurowany w celu użycia IE itp.

+1

Czy można to zrobić powyżej za pomocą kodu? Powodem jest to, że aplikacja, która będzie musiała uzyskać dostęp do usługi sieciowej, jest aplikacją typu Windows, która może działać na wielu komputerach. Nie można poprosić użytkowników o wykonanie powyższych kroków. – Hemant

7

Można użyć domyślnego ustawienia od ciebie lokalnej maszynie:

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

aw app.config dodać tę konfigurację:

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