Categorias
ftp time-out upload

Sanando o “The request was aborted: The request was canceled.” no upload

Nome do post meio estranho, mas vamos l??!
Esses dias, fazendo um uploadzinho maroto, o cliente precisou enviar um arquivo “grande” s?? que na hospedagem dele, mesmo adicionando os par??metros de configura????o no web.config como executionTimeoutmaxRequestLengthmaxAllowedContentLength, etc, continuava o erro. Dando uma vasculhada na net algumas pessoas resolveram colocando o KeepAlive como false mas eu estava usando o WebClient que n??o tem o atributo e n??o queria reprogramar o que j?? havia feito. Eis que encontro uma solu????o que caiu como uma luva mesmo n??o usando o atributo.
Adicione ao projeto a classe ExtendedWebClient conforme o c??digo abaixo:

public class ExtendedWebClient : WebClient
{
    public int Timeout { get; set; }
    public new bool AllowWriteStreamBuffering { get; set; }

    protected override WebRequest GetWebRequest(Uri address)
    {
        var request = base.GetWebRequest(address);
        if (request != null)
        {
            request.Timeout = Timeout;
            var httpRequest = request as HttpWebRequest;
            if (httpRequest != null)
            {
                httpRequest.AllowWriteStreamBuffering = AllowWriteStreamBuffering;
            }
        }
        return request;
    }

    public ExtendedWebClient()
    {
        Timeout = 100000;
    }
}

Ent??o, agora ?? apenas substituir o WebClient por ExtendedWebClient ficando assim:

ExtendedWebClient ftp = new ExtendedWebClient();
ftp.Timeout = Timeout.Infinite;
ftp.AllowWriteStreamBuffering = false;

E o resto segue! 
Pode utilizar o KeepAlive? Pode! Basta fazer da mesma forma que o AllowWriteStreamBuffering.