ObjectDisposedException nawet po ustawieniu obsługi klienta false więc nie jestem utylizacji i przy użyciu tej samej instancji

głosy
0

Od przeczytaniu innych postów na StackOverflow, staram się używać tego samego httpclient dla wielu metod, ale jestem wciąż otrzymuję błąd:

System.ObjectDisposedException: Cannot access a disposed object. Object name: 'System.Net.Http.HttpClient'.

public class Program
{
    private readonly static HttpClientHandler handler = new HttpClientHandler();
    private readonly static HttpClient client = new HttpClient(handler, false);

    public Program()
    {
        client.BaseAddress = new Uri();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(application/json));
    }


    public async IDictionary<string, object> GetCustomer(string customerId)
    {
        using (client)
        {
            try
            {
                 var response = await client.GetAsync().ConfigureAwait(false);
                 response.EnsureSuccessStatusCode();
                 var responseContent = await.result.Content.ReadAsStringAsync();
                 return JsonConvert.DeserializeObject<IDictionary<string, object>(responseContent);
            }
            catch { }
        }

    }

    public async IDictionary<string, object> GetOrdersByCustomerId(string customerId)
    {
        using (client)
        {
            try
            {
                 var response = await client.GetAsync().ConfigureAwait(false);
                 response.EnsureSuccessStatusCode();
                 var responseContent = await.result.Content.ReadAsStringAsync();
                 return JsonConvert.DeserializeObject<IDictionary<string, object>(responseContent);
            }
            catch { }
        }

    }
}

W oddzielnym pliku, dzwonię tych dwóch metod jeden po drugim jako takie:

var customer = programInstance.GetCustomer().GetAwaiter().GetResult();
var orders = programInstance.GetOrdersByCustomerId().GetAwaiter().GetResult();

Kiedy zadzwonić GetCustomer(), odpowiedź jest 200 OK i jestem w stanie odzyskać informacje chcę, ale jak tylko zadzwonić GetOrdersByCustomerId(), I wtedy pojawia się komunikat o błędzie podano wcześniej.

Czytałem o tym, czy httpclient należy wyrzucać lub jak niektórzy ludzie pozbyli błędu chwytając obsługi i ustawiania wyrzucać do fałszywe, ale to nie wygląda jak to działa na mnie.

Czy jest coś jestem brakujące tutaj?

Utwórz 10/10/2019 o 00:46
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
0

Brakuje, że zarówno metody utylizacji swój HttpClientczyniąc go bezużytecznym do dalszych rozmów, jak każdy zbywanego obiektu (Streams, ...)

Albo chcą wystąpienie nowego HttpClientza każdym razem, jeżeli są stosowane wewnątrz using(nie jest to dobry pomysł, zgodnie z dokumentacją , jeśli oczekuje się wysokiego obciążenia), czy pozostawić wystąpienie aż aplikacja się wyłączy.

Odpowiedział 10/10/2019 o 00:58
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more