ObjectDisposedException i po nastavení popisovač klienta na false, takže nejsem likvidaci a za použití stejné instance

hlasů
0

Čtení dalších příspěvků na StackOverflow, Snažím se používat stejné httpclient pro více způsobů, ale já jsem stále dostává chybu:

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 { }
        }

    }
}

V samostatném souboru, volám tyto dvě metody jeden za druhým, jako například:

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

Když říkám GetCustomer(), je odpověď 200 OK a jsem schopen získat informace, co chci, ale jakmile jsem zavolat GetOrdersByCustomerId(), pak jsem se zobrazí chybová zpráva uvedené výše.

Četl jsem o tom, zda httpclient třeba likvidovat nebo jak někteří lidé dostali zbavit chyby tím, že chytne psovoda a nastavení likvidovat na hodnotu false, ale to nevypadá, že to funguje pro mě.

Je tu něco, co mi tu chybí?

Položena 10/10/2019 v 00:46
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

Že vám něco chybí, že obě vaše metody jsou likvidaci vašeho HttpClienttakže je nepoužitelný v dalších výzvách, jako jakýkoli likvidovaného objektu (Streams, ...)

Buď chtějí vytvořit instanci nový HttpClientpokaždé, pokud je použit uvnitř using(není dobrý nápad v souladu s dokumentací , pokud se očekává, že vysoká zátěž), nebo ponechat instance, dokud aplikace vypne.

Odpovězeno 10/10/2019 v 00:58
zdroj uživatelem

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