Quando estamos enviando arquivos grandes com RestSharp, aleatoriamente temos alguns problemas de OutOfMemory. Isso acontece porque RestSharp está usando HttpWebRequest em segundo plano e o valor padrão para AllowWriteStreamBuffering é verdadeiro. Isso significa que todo o arquivo é carregado na memória ao fazer a consulta, caso haja algum redirecionamento para poder reproduzi-lo. Mas se estivermos enviando um arquivo de 500 MB, é um problema.
O que precisaríamos é ser capaz de definir AllowWriteStreamBuffering como false, mas não há como alterar AllowWriteStreamBuffering no ConfigureWebRequest.
Algo assim seria suficiente para nossa necessidade:
var request = new RestRequest(Method.POST);
request.AllowWriteStreamBuffering = false;
request.Files.Add(new FileParameter // ...
Observação: para poder testar a pressão da memória de .Net vs RestSharp 105.2.3, veja como o testamos, pois há uma correção de bug não lançada ao usar o .AddFile:
// In the current implementation of RestSharp, there is an issue when using AddFile with a writer.
// It doesn't set the ContentLength, which break the queries with System.Net.ProtocolViolationException as we are not uploading
// the expected amount of bytes. It's fixed in an yet unreleased version, so we are using the Files.Add manually for now.
var request = new RestRequest(Method.POST);
request.Files.Add(new FileParameter
{
Name = "file",
Writer = outStream => inStream.CopyTo(outStream),
FileName = fileName,
ContentLength = inStream.Length,
});
alguma atualização disso? Estou tendo exatamente o mesmo problema e me parece razoável expor AllowWriteStreamBuffering no RestClient ou RestRequest. Pelo que eu sei, não há solução alternativa. Meu caso de uso é enviar arquivos paralelos de 100 MB e, se AllowWriteStreamBuffering for verdadeiro, ele lançará exceção de memória com muita frequência.
Encontro o mesmo problema e não sei como lidar com
já está resolvido ????
@AgentCoolDevil você quer ajudar? Faça uma solicitação de pull.
Alguém ainda está recebendo este erro na versão mais recente?
Como @yvesmh corretamente mencionado em # 1213, este problema pode ser resolvido desabilitando o buffer de fluxo de gravação WebRequest
. Você pode usar a configuração de solicitação da web em IRestClient
para lidar com esses casos.
client.ConfigureWebRequest(x => x.AllowWriteStreamBuffering = false);
Comentários muito úteis
Encontro o mesmo problema e não sei como lidar com