[ASP.NET] Core 3.1, IIS, bez PROXY: A connection attempt failed

0

Hej, mierzę się z problemem, na SO na razie cisza, może tutaj ktoś będzie w stanie mi pomóc. A mianowicie, po wrzuceniu ASP.NET Core 3.1 Web API na serwer ISS aplikacja rzuca mi wyjątkiem:

One or more errors occured. A connection attempt failed because the
connected party did not properly respond after a period of time, or
established connection failed because connected host has failed to
respond.

Kiedy analizowałem podobne przypadki na SO, w większości wyjątek był powodowany przez złą konfigurację PROXY. Tutaj nie używam proxy. Także na mojej lokalnej maszynie wszystko działało bez zarzutu. Problem się pojawił po deployowaniu Web API na serwer, I nie jestem pewien co może go powodować.

Podejrzenia:

  • źle skonfigurowany HttpClient
  • niezainstalowany Core 3.1 na serwerze (czekam na info od nich)

W moich logach jest napisane, że wyjątek jest rzucany przez metodę GetHtmlDocument w:

public class HttpClientProvider : IHttpClientProvider
    {
        private static HttpClient _httpClient;

        public string GetHtmlDocument(string url) //tutaj się pojawia wyjątek
        {
            string html = string.Empty;

            using (HttpResponseMessage response = GetHttpClient().GetAsync(new Uri(url, UriKind.Absolute)).Result)
            {
                using (HttpContent content = response.Content)
                {
                    html = content.ReadAsStringAsync().Result;
                }
            }

            return html;
        }

        private HttpClient GetHttpClient()
        {
            if (_httpClient != null)
            {
                return _httpClient;
            }

            return CreateNewHttpClient();
        }

        private static HttpClient CreateNewHttpClient()
        {
            HttpClientHandler handler = new HttpClientHandler();
            _httpClient = new HttpClient(handler);
            _httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3703.0 Safari/537.36");

            return _httpClient;
        }
    }

Może będziecie mieli jakieś pomysły?

2

Jak na moje oko to z hostingu nie ma dostępu do urla z którego korzysta httpclient.

Czemu masz statyczne pole HttpClient?

0
szydlak napisał(a):

Jak na moje oko to z hostingu nie ma dostępu do urla z którego korzysta httpclient.

Właściwie to z tego samego serwera i DNS miałem dostęp do URL z którego korzysta httpclient. Dwie różnice, to była to wersja Core 2.1, miałem też nieco inaczej konfigurowanego HttpClient, ale różnica konfiguracji była nieznaczna i raczej nieistotna.

szydlak napisał(a):

Czemu masz statyczne pole HttpClient?

Inspirowałem się tym: https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/

0

Ja bym obstawiał, żle skonfigurowany HttpClient.
Natomiast to statyczne pole to jak dla mnie nie wygląda dobrze.
Pole statyczne nie jest przypisane do obiektu tylko do typu.

Ja korzystałbym z IHttpClientFactory jak coś.

0

Przepisałem wszystko na Core 2.2 i problem się powtarza.

O tyle ciężko mi go rozwiązać, o ile pojawia się jedynie po wrzuceniu na hosta :(

Co do static HttpClient to faktycznie niektórzy używają przy potrzebie ponownego wielokrotnego użycia go, więc tutaj nie wiedzę nic złego w tym. static wnosi tu jedynie tyle, że jest dostępny globalnie. Dodatkowo w poprzednim przykładzie wyłapałem problem z użyciem using, którego nie powinienem wykorzystywać jeśli mam zamiar wielokrotnie użyć HttpClient. Ale to i tak nic nie zmieniło.

W każdym razie próbowałem już różnych konfiguracji klienta http, z marnym rezultatem.

1

Probwałeś się podpiąc tam za pomocą remote debuggera?

0
Undo napisał(a):

Probwałeś się podpiąc tam za pomocą remote debuggera?

Nie. Nigdy z tego nie korzystałem.

0

A może problem jest po prostu z firewallem i usługa nie może się podłączyć do zdalnego hosta?

1

A co widać w logach po wywołaniu tego zapytania?

0
baroo napisał(a):

A co widać w logach po wywołaniu tego zapytania?

exception

1

a jak uzyjesz HttpClientFactory to masz ten sam blad?

od jakiegos czasu microsoft zaleca uzywanie httpclientfactory
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore-3.1

0
fasadin napisał(a):

a jak uzyjesz HttpClientFactory to masz ten sam blad?

od jakiegos czasu microsoft zaleca uzywanie httpclientfactory
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore-3.1

Niestety, ten sam wynik. Ale lektura ciekawa.

Interesujące jest, co zauważyłem po analizie działania API na serwerze, że do jednego z serwisów odbiera poprawne wyniki, a przy żądania do drugiego serwisu rzuca mi wyjątkiem. Zaznaczam, że na lokalnej maszynie jest wszystko OK, także z drugim serwisem. Poza tym przy starej wersji API też wszystko jest OK, gdzie wysyłałem żądania z tego samego serwera na te same URL. Tak więc o co komon?

Podobny wynik mam z użyciem WebClienta:

using (WebClient client = new WebClient())
            {
                client.Headers["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/81.0";
                string html = client.DownloadString(url);

                return html;
            }
1

Ostatecznie się okazało, że moje IP było zablokowane w serwisie do którego wysyłałem żądania ;p

Ale dziękuję wszystkim za chęć udzielenia pomocy. Udanej reszty wtorku!

3

Ja bym nastepnym razem zaczal od tego by nie wysylac kodu na ISS. Watpie by na tej stacji kosmicznej prowadzili jakis hosting

2
sosnek napisał(a):

Ja bym nastepnym razem zaczal od tego by nie wysylac kodu na ISS. Watpie by na tej stacji kosmicznej prowadzili jakis hosting

Próbowałem tam wysłać aplikację, ale mieli strasznie powolne łącze, więc ostatecznie zdecydowałem się hostować na IIS.

1 użytkowników online, w tym zalogowanych: 0, gości: 1