ObjectDisposedException még azután is, az ügyfél felvezető hamis úgyhogy nem rendelkező és azonos fokon

szavazat
0

Olvasva más hozzászólás StackOverflow, próbálom újra ugyanazt httpclient több módszer, de én még mindig megjelenik a hibaüzenet:

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

    }
}

Egy külön fájlban, hívom a két módszer egyik a másik után, mint például:

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

Ha hívom GetCustomer(), a válasz 200 OK és képes vagyok kinyerni az információkat akarok, de amint hívom GetOrdersByCustomerId(), azt majd a következő hibaüzenetet azt korábban.

Olvastam arról httpclient kell ártalmatlanítani, vagy hogy egyes emberek megszabadultak a hiba a rángatás a felvezető és a beállítási dobja a hamis, de nem úgy néz ki, mintha dolgozott ki a számomra.

Van valami, amit hiányzik itt?

A kérdést 10/10/2019 00:46
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
0

Hiányzik, hogy mind a módszerek ártalmatlanítása az HttpClientígy használhatatlanná további hívások, mint bármely elhelyezett tárgy (Streams, ...)

Azt sem akar példányosíthatunk egy új HttpClientminden alkalommal, ha van benne using(nem egy jó ötlet szerint a dokumentációban , ha nagy terhelés várható), vagy hogy a példány, amíg az alkalmazás leáll.

Válaszolt 10/10/2019 00:58
a forrás felhasználó

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