2012-01-04 11 views
15

Stworzyłem prostą aplikację WinForms, która korzysta z bezpłatnego serwisu internetowego http://www.webservicemart.com/uszip.asmx. Ale ta aplikacja nie korzystać z trybu serwisowego z błędem:Klient WCF - Wymagane uwierzytelnianie proxy 407 podczas korzystania z usługi internetowej

The remote server returned an unexpected response: (407) Proxy Authentication Required (The ISA Server requires authorization to fulfill the request. Access to the Web Proxy service is denied)

kodeksu, który tworzy proxy i wyzwala działanie usługi:

ChannelFactory<ServiceReference1.USZipSoap> proxy = new ChannelFactory<ServiceReference1.USZipSoap>("USZipSoap"); 
ServiceReference1.USZipSoap client = proxy.CreateChannel(); 
string str = client.ValidateZip("12345"); 
MessageBox.Show(str); 

Czy to problem z siecią swojej firmy lub jest to proxy na strona webservicemart.com?

Mam googlowane wiele informacji o zmianie plików konfiguracyjnych, tworzeniu niestandardowych powiązań itp. Ale czuję brak bardziej podstawowego zrozumienia ...
Jeśli ten błąd dotyczy serwera ISA naszej sieci firmowej, to co konfiguracji należy dokonać na serwerze ISA, aby nie ograniczać mnie do korzystania z zewnętrznych usług sieciowych?

+1

Tak, jest problem z proxy w sieci lokalnej. Pokaż konfigurację wiązania, a także sprawdź, czy masz skonfigurowany serwer proxy w programie Internet Explorer. –

+0

Właśnie przygotowałem swoją konfigurację, ale była ona zbyt duża, aby zmieściła się w rozmiarze komentarza i stanęłam przed ograniczeniem, mówiąc, że nie mogę odpowiedzieć na własne pytania.
Ale w każdym razie ... Naprawdę mam skonfigurowany serwer proxy w moich ustawieniach przeglądarki.
Mam pewne postępy po zmianie useDefaultWebProxy z true na false. A teraz mam EndpointNotFoundException z komunikatem "Nie było słuchania punktu końcowego na http://www.webservicemart.com/uszip.asmx, który mógłby zaakceptować wiadomość, często jest to spowodowane nieprawidłowym adresem lub działaniem SOAP. Zobacz InnerException, jeśli jest obecny , po więcej szczegółów." –

+0

i wyjątek InnerException typu System.Net.WebException z komunikatem "Nie można rozpoznać nazwy zdalnej:" www.webservicemart.com "" –

Odpowiedz

43

W konfiguracji wiązania upewnij się, że useDefaultWebProxy jest ustawione na true - użyje konfiguracji znalezionej w IE. W pliku konfiguracyjnym dodać następujący fragment zapewnienia domyślnego poświadczenia są używane do uwierzytelniania na serwerze proxy:

<system.net> 
    <defaultProxy useDefaultCredentials="true" /> 
</system.net> 
+0

To działa! Dziękuję Ci bardzo! :) –

+0

Warto zauważyć, że nie wydaje się to być takie samo jak ustawienie właściwości na domyślnym serwerze proxy. –

+0

@VincentHubert Jeszcze ciekawiej jest wiedzieć, co nie jest takie samo i nie ma tam komentarzy wiszących –

1

Wygląda na to, że cały ruch w Twojej firmie jest przekierowywany przez serwer proxy. Czy możesz przeglądać usługę internetową z poziomu przeglądarki IE i zobaczyć jej plik wsdl i wywołać stronę testową, aby zobaczyć wyniki. Jeśli tak jest, to spróbuj dodać poniższy punkt w Twojej web.config:

<system.net> 
<defaultProxy>  
<proxy proxyaddress="<your proxy address>" bypassonlocal="true" /> 
</defaultProxy> 
</system.net> 

Możesz znaleźć adres serwera proxy w ustawieniach swojego IE.

UWAGA: Po przejściu do różnych środowisk należy upewnić się, że w tym samym przypadku trzeba usunąć powyższą konfigurację.

+0

Dziękuję bardzo za odpowiedź. Właśnie poczyniłem postępy w rozwiązywaniu tego problemu.Zmieniłem useDefaultWebProxy z true na false, a potem wydaje mi się, że przekazałem swoje uwierzytelnianie proxy. Ale wciąż mam inne wyjątki mówiąc, że "Nie było punktu końcowego nasłuchującego na http://www.webservicemart.com/uszip.asmx, który mógłby przyjąć wiadomość." Próbowałem również innego bezpłatnego serwisu i właśnie otrzymałem dokładnie ten sam błąd. –

+0

Próbowałem uzyskać dostęp do powyższego serwisu internetowego i działa dobrze. Jeśli potrzebujesz pomocy, po prostu dodaj więcej aktualizacji i możesz spróbować pomóc. – Rajesh

2

Ten pracował dla mnie ... zastępując 10.1.0.50 i numer portu IP z serwera proxy za

<system.net> 
    <defaultProxy useDefaultCredentials="true"> 
     <proxy usesystemdefault="False" proxyaddress="http://10.1.0.50:8080" bypassonlocal="True" /> 
    </defaultProxy> 
    </system.net> 
+0

Używam @Ladislav Mrnka answare, ale to działało również dla mnie. – MFedatto

0

Jakiś czas w przyszłości.

WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials; 
Powiązane problemy