Cópia de arquivos através de rede com autenticação

Recentemente precisei fazer acesso a uma pasta compartilhada na rede para disponibilizar o download de um arquivo direto dela. A idéia era um Stream direto do arquivo na rede para o download, nada demais.

Tentei inicialmente a possibilidade de logins compartilhados/iguais no computador do IIS (o login utilizado para o pool/aplicação) e no servidor com o arquivo para que então o "hand shake" ocorresse de forma automática entre eles, mas não funcionou, não houve a autenticação automática e com isso recebi a mensagem de acesso negado ao tentar acessar ao arquivo.

Então fui atrás de rotinas que autenticassem o acesso ao compartilhamento onde o arquivo está presente para então fazer a cópia dele localmente e então o download fosse feito com base nessa cópia.

A única rotina que funcionou segue um conceito muito primordial que é a execução do "NET USE":

var processo = Process.Start(new ProcessStartInfo()
{
    FileName = "net",
    Arguments = string.Format("use {0} /USER:{1} {2}", PASTANAREDE, USUÁRIO, SENHA),
    WindowStyle = ProcessWindowStyle.Hidden,
    RedirectStandardOutput = true,
    RedirectStandardError = true,
    UseShellExecute = false
});
// armazenar qualquer informação de saída da execução do comando para exibição em caso de erro. 
string stdoutx = processo.StandardOutput.ReadToEnd();
string stderrx = processo.StandardError.ReadToEnd();    
 
processo.WaitForExit(10000); // espera até 10 segundos para forçar o processo a ser finalizado.
 
if (processo.ExitCode != 0)
{
    throw new NegocioException("Erro ao executar o comando para autenticar o acesso à pasta do arquivo a baixar." +
        Environment.NewLine + stdoutx + Environment.NewLine + stderrx);
}



Comentários:

  1. A PASTANAREDE não pode teruma \ no final, então sugiro utilizar um .TrimEnd() para remover.
  2. O USUÁRIO deve ser no formato DOMÍNIO\USUÁRIO.



Comentários

Postagens mais visitadas deste blog

Selenium + Firefox = The type initializer for 'System.IO.Compression.ZipStorer' threw an exception

Transmissor sem fio bluetooth Tomate MTB-803 e manual

Problema de rolagem de HTML em iframe no iOS