Salvando arquivo no servidor IIS7/18/2009 1:34:24 PMpor: GrugerEm: ASP.NETAvaliação: 4.00
No artigo desta semana, irei mostrar para vocês como configurar o servidor IIS 6.0 para permitir que sua aplicação Web ASP.NET grave e edite arquivos em pastas físicas do servidor.
A idéia deste artigo me surgiu quando me deparei com um problema na última sexta-feira.
Em meu trabalho, eu tinha que criar uma rotina que, a cada dois dias, fazia o download de um arquivo em um determinado site e, em seguida, processasse alguns dados contidos no arquivo.
Na verdade, o problema envolvia uso de Threads e extração de arquivos Zip, ehhehe. Mas isto fica para outro tópico.
Utilizando a própria biblioteca do C# 3.5, é fácil fazer download de qualquer arquivo da Web:
private void DownloadFile()
{
// Novo objeto para comunicação Web
WebClient client = new WebClient();
// Define a função FileCompletedTask para o evento lançado quando o download terminar
client.DownloadFileCompleted += new AsyncCompletedEventHandler(FileCompletedTask);
// Define a Url do arquivo e o local de destino do download
client.DownloadFileAsync(new Uri"http://www.meuservidor.com/meuarquivo.XXX"), "C:\pasta_do_servidor\nomedoarquivo.XXX");
}
private void FileCompletedTask(object sender, AsyncCompletedEventArgs e)
{
// Download concluído.
}
Basicamente, este código cria uma instância do objeto WebClient, utilizado para fazer Downloads e Uploads dentro do framework .NET.
A string nomedoarquivo é com que nome que o arquivo será salvo na pasta_do_servidor, e a Uri representa a Url em que o arquivo desejado está hospedado.
Até aqui, nenhum segredo. Se você rodar esse código localmente, tudo irá funcionar perfeitamente bem. Isto acontece, pois você provavelmente possui privilégios de administrador em sua conta Windows e o IIS virtual criado pelo debbuger do Visual Studio utiliza esta conta para rodar as aplicações.
Quando publicado em um servidor, é necessário que a conta definida para acesso anônimo de seu site possua privilégios de gravação na pasta "C:\pasta_do_servidor". Isto é bastante intuitivo e, com um pouco de conhecimento NTFS, é possível concluir que isto resolveria o problema.
Faça o seguinte:
Abra o IIS, expanda a guia Site da Web Padrão, clique com botão direito no diretório virtual de Seu Site e vá na opção Propriedades.
Permissões de gravação:
Usuário para acesso anônimo: (aba Segurança)
Além disto, é necessário configurar que o usuário IUSR_MAURICIO possua permissões de gravação no diretório físico. Por padrão, este usuário é sempre chamado de IUSR_MACHINENAME.
Se você utiliza IIS 6.0 ou superior, poderá configurar isto da mesma forma que foi feita nas imagens anteriores, através do caminho:
IIS > Site da Web Padrão > Seu WebSite > Permissões.
Para IIS 5.0, deve-se ir ao diretório pelo Windows Explorer e adicionar estas permissões de usuário na aba Segurança.
Se você não possui acesso direto à interface do IIS de seu servidor, peça para um administrador do servidor fazer isto para você.
Agora que temos as permissões para IUSR_MACHINENAME configuradas, basta acrescentar o ingrediente mágico à mistura. Isto me tomou muito tempo de Googling para encontrar a resposta. É incrível que, mesmo com as configurações definidas e forçando o uso do IUSR_MACHINENAME para acesso anônimo do site, é necessário definir no Web.Config da aplicação que esta aplicação utiliza este usuário. Se isto não for feito, a aplicação continuará a usar o usuário do Sistema - System - para executar a aplicação e o arquivo não será salvo!
Aí vai a linha do Web.config que deve ser inserida entre <system.web> e </system.web>:
<system.web>
...
<identity impersonate="true" />
...
</system.web>
É isto pessoal! Esta linha me consumiu um dia inteiro para resolver o problema de gravar arquivos baixados remotamente. Vale dizer que procedimento análogo deve ser utilizado para configurar um servidor de Upload de arquivos.
Espero que seja de ajuda para muitos que possuem este problema.
Agradeço a leitura de todos,
Mauricio
Guilherme
10/29/2010 2:29:07 PM
Cara, parabéns!
Esse problema já tinha me consumiu um dia inteiro de trabalho! Não fosse essa informação seria mais outro dia pra achar isso googlando!
Valeu!
Deacon
6/22/2011 12:27:28 PM
Good point. I hadn't tgohuht about it quite that way. :)
zggresrmyyi
6/23/2011 9:42:31 AM
3WS9UY , [url=http://kemwxrtrixjh.com/]kemwxrtrixjh[/url], [link=http://ugslcorrlrnp.com/]ugslcorrlrnp[/link], http://lxnjiybhqfxz.com/
litvxjlx
6/25/2011 12:07:00 PM
riaGaz , [url=http://xbnoxziexzgw.com/]xbnoxziexzgw[/url], [link=http://qlzsyoccorih.com/]qlzsyoccorih[/link], http://uxqbwwdxxxla.com/
No artigo desta semana, irei mostrar para vocês como configurar o servidor IIS 6.0 para permitir que sua aplicação Web ASP.NET grave e edite arquivos em pastas físicas do servidor.
A idéia deste artigo me surgiu quando me deparei com um problema na última sexta-feira.
Em meu trabalho, eu tinha que criar uma rotina que, a cada dois dias, fazia o download de um arquivo em um determinado site e, em seguida, processasse alguns dados contidos no arquivo.
Na verdade, o problema envolvia uso de Threads e extração de arquivos Zip, ehhehe. Mas isto fica para outro tópico.
Utilizando a própria biblioteca do C# 3.5, é fácil fazer download de qualquer arquivo da Web:
private void DownloadFile()
{
// Novo objeto para comunicação Web
WebClient client = new WebClient();
// Define a função FileCompletedTask para o evento lançado quando o download terminar
client.DownloadFileCompleted += new AsyncCompletedEventHandler(FileCompletedTask);
// Define a Url do arquivo e o local de destino do download
client.DownloadFileAsync(new Uri"http://www.meuservidor.com/meuarquivo.XXX"), "C:\pasta_do_servidor\nomedoarquivo.XXX");
}
private void FileCompletedTask(object sender, AsyncCompletedEventArgs e)
{
// Download concluído.
}
Basicamente, este código cria uma instância do objeto WebClient, utilizado para fazer Downloads e Uploads dentro do framework .NET.
A string nomedoarquivo é com que nome que o arquivo será salvo na pasta_do_servidor, e a Uri representa a Url em que o arquivo desejado está hospedado.
Até aqui, nenhum segredo. Se você rodar esse código localmente, tudo irá funcionar perfeitamente bem. Isto acontece, pois você provavelmente possui privilégios de administrador em sua conta Windows e o IIS virtual criado pelo debbuger do Visual Studio utiliza esta conta para rodar as aplicações.
Quando publicado em um servidor, é necessário que a conta definida para acesso anônimo de seu site possua privilégios de gravação na pasta "C:\pasta_do_servidor". Isto é bastante intuitivo e, com um pouco de conhecimento NTFS, é possível concluir que isto resolveria o problema.
Faça o seguinte:
Abra o IIS, expanda a guia Site da Web Padrão, clique com botão direito no diretório virtual de Seu Site e vá na opção Propriedades.
Permissões de gravação:
Usuário para acesso anônimo: (aba Segurança)
Além disto, é necessário configurar que o usuário IUSR_MAURICIO possua permissões de gravação no diretório físico. Por padrão, este usuário é sempre chamado de IUSR_MACHINENAME.
Se você utiliza IIS 6.0 ou superior, poderá configurar isto da mesma forma que foi feita nas imagens anteriores, através do caminho:
IIS > Site da Web Padrão > Seu WebSite > Permissões.
Para IIS 5.0, deve-se ir ao diretório pelo Windows Explorer e adicionar estas permissões de usuário na aba Segurança.
Se você não possui acesso direto à interface do IIS de seu servidor, peça para um administrador do servidor fazer isto para você.
Agora que temos as permissões para IUSR_MACHINENAME configuradas, basta acrescentar o ingrediente mágico à mistura. Isto me tomou muito tempo de Googling para encontrar a resposta. É incrível que, mesmo com as configurações definidas e forçando o uso do IUSR_MACHINENAME para acesso anônimo do site, é necessário definir no Web.Config da aplicação que esta aplicação utiliza este usuário. Se isto não for feito, a aplicação continuará a usar o usuário do Sistema - System - para executar a aplicação e o arquivo não será salvo!
Aí vai a linha do Web.config que deve ser inserida entre <system.web> e </system.web>:
<system.web>
...
<identity impersonate="true" />
...
</system.web>
É isto pessoal! Esta linha me consumiu um dia inteiro para resolver o problema de gravar arquivos baixados remotamente. Vale dizer que procedimento análogo deve ser utilizado para configurar um servidor de Upload de arquivos.
Espero que seja de ajuda para muitos que possuem este problema.
Agradeço a leitura de todos,
Mauricio
Esse problema já tinha me consumiu um dia inteiro de trabalho! Não fosse essa informação seria mais outro dia pra achar isso googlando!
Valeu!