ObjectDisposedException mesmo depois de definir manipulador de cliente para falsa, então eu não vou descartar e usando a mesma instância

votos
0

A leitura de outros posts sobre stackoverflow, eu estou tentando reutilizar o mesmo httpclient para vários métodos, mas eu ainda estou recebendo o erro:

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

    }
}

Em um arquivo separado, estou ligando estes dois métodos um após o outro como tal:

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

Quando eu chamo GetCustomer(), a resposta é 200 OK e eu sou capaz de recuperar as informações que eu quero, mas assim que eu chamo GetOrdersByCustomerId(), então eu recebo a mensagem de erro mencionado anteriormente.

Estive lendo sobre se httpclient precisa ser alienar ou como algumas pessoas se livrou do erro, agarrando o manipulador e definindo descartar a falsa mas não parece que está funcionando para mim.

Existe algo que eu estou ausente aqui?

Publicado 10/10/2019 em 00:46
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

Está faltando que ambos os métodos são descartar sua HttpClienttornando-o inutilizável em mais chamadas, como qualquer objeto descartado (córregos, ...)

Você quer quer instanciar um novo HttpClienta cada vez, se usado dentro using(não é uma boa ideia de acordo com a documentação , se a carga elevada é esperada), ou manter a instância até que o aplicativo é desligado.

Respondeu 10/10/2019 em 00:58
fonte usuário

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