2009-09-11 18 views
7

Mam aplikację klienta .NET, która wywołuje moją usługę sieci Web .NET, która z kolei wywołuje usługę internetową innej firmy, na przykład na stronie "www.foo.com".Przyczyna wyjątku "System.Net.WebException: Zdalna nazwa nie mogła zostać rozstrzygnięta"?

.NET Client -> 'My Web Service' -> 'Third Party Web Service' 

Od Visual Studio 2008, to wszystko działa dobrze, to znaczy, biegnę 'My Web Service' w localhost:someport które z powodzeniem nazywa 'Third-Party Web Service'.

Opublikowałem następnie "Moja usługa sieciowa" na pudełku Windows 2003 Server. Teraz, gdy "Moja usługa sieciowa" nazywa się "Usługa WWW innej firmy", otrzymuję wyjątek,
"System.Net.WebException: Nie można rozpoznać nazwy zdalnej:" www.foo.com "."

Próbowałem następujące:

  1. Na serwerze gdzie rozmieszczone 'My Web Service', otworzyłem Internet Explorer i wpisany adres usług sieci http://www.foo.com/somewebservice.asmx '. Ta operacja zakończyła się pomyślnie, ponieważ wyświetlono listę dostępnych metod usługi sieci Web.

  2. W pliku "Moja usługa sieciowa" zmieniono adres URL "Zewnętrzna usługa sieciowa" z nazwy strony internetowej na jej adres IP. Nie powiodło się to z wyjątkiem: "System.Net.Sockets.SocketException: Operacja gniazda była próbowana do nieosiągalnej sieci".

  3. Następnie napisałem prostą wiązkę testową Windows Forms, aby po prostu zadzwonić do "usługi zewnętrznej innej firmy". Uruchomiłem tę wiązkę testową na serwerze i pomyślnie zadzwoniłem do "usługi innej firmy" .

  4. Następnie wypróbowałem inną usługę internetową innej firmy, która dała takie samo zachowanie jak w 1, 2 i 3 powyżej.

  5. W końcu dodałem adres IP do pliku "hosts" na serwerze, ale otrzymałem ten sam błąd "nazwa zdalnego nie udało się rozwiązać", chociaż tym razem o wiele szybciej! Jeśli był to problem z DNS, nie spodziewałbym się, że moje testy 1 i 3 będą działać.

Jak naprawić ten problem?

+0

Jest to najprawdopodobniej spowodowane ustawieniami zabezpieczeń związanymi z twoją witryną/usługą w IIS na serwerze. Coś w tych ustawieniach uniemożliwia wywoływanie ich na inne serwery. Powinieneś spróbować opublikować to również na ServerFault. – BBlake

+0

Czy masz serwer ISA lub niektóre zapory sieciowe lub serwery proxy? – rahul

+2

To był problem z serwerem proxy na końcu. Komunikat o wyjątku był czerwonym śledziem. Aby to naprawić, utworzyłem instancję WebProxy przy użyciu adresu IP i portu naszego serwera proxy: Proxy WebProxy = nowy WebProxy (proxyServerIPAddress, Convert.ToInt32 (proxyServerPort)); myService.Proxy = proxy; –

Odpowiedz

7

Od komentarzu Marka do własnej pytanie:

To był problem serwer proxy w końcu. Komunikat o wyjątku był czerwonym śledziem. Aby go naprawić ja stworzył instancję WebProxy przy użyciu adresu IP i port naszego serwera Proxy:

WebProxy proxy = new WebProxy(proxyServerIPAddress, Convert.ToInt32(proxyServerPort));  
myService.Proxy = proxy; 
0

myślę, że to może również oznaczać problem DNS, a ja nieśmiało zawierania o moim niedawnym doświadczeniu z tym wyjątek. W moim (niedawnym) doświadczeniu wyjątek przestał być wyrzucany (i rejestrowany przez moją aplikację) "na własną rękę".

5
<system.net> 
     <defaultProxy> 
      <proxy 
       usesystemdefault = "false" 
     /> 
     </defaultProxy> 
    </system.net> 

anulować ustawienia proxy

0

Mieliśmy pewne problemy ze dwie aplikacje uruchomione na serwerze problemów.Błąd wystąpiłby tylko wtedy, gdyby działał pod SQL Job Agent zgodnie z harmonogramem, więc bardzo trudno było wyodrębnić ten problem. Okazało się, że użytkownicy sieci mieli problemy z migracją z zapory ISA do zapory Forefront. Rozwiązanie Iamtonyzhou do używania "usesystemdefault" w app.config działało dobrze jako obejście, dopóki problemy z zaporą sieciową nie zostaną rozwiązane. Nie sądzę, żebym kiedykolwiek zainicjował obiekt WebProxy, ponieważ nasze konfiguracje firewalla zawsze podlegają zmianom.

Powiązane problemy