none
Acesso a sub-pasta da aplicação do IIS no WINDOWS 2008 SERVER RRS feed

  • Pergunta

  • Prezados boa tarde

    Estamos desenvolvendo uma aplicação WEB que utiliza C#, SILVERLIGHT e WCF.
    Temos uma característica em nossa aplicação, onde no IIS (pasta da aplicação) haverá uma subpasta MUSICAS e preciso que minha aplicação com as tecnologias acima acesse os arquivos da mesma e mostre ao usuário em um ListBox.

    Já tentamos de diversas maneiras

    System.Web.Hosting.HostingEnvironment.MapPath("/");
    AppDomain.CurrentDomain.BaseDirectory;
    HttpRuntime.AppDomainAppPath;
    Directory.GetCurrentDirectory() e Environment.CurrentDirectory
    

    Inclusive, por serviço etc. Hora ele diz que não foi possível encontrar o caminho ai, descobrimos que ele estava apontando para o caminho absoluto da máquina cliente que está executando a aplicação, outrora, acesso negado e já demos todas as permissões na pasta em nosso servidor web, vinculamos o usuário ao Pool no IIS etc, tentamos também, compartilhar a pasta na rede e acessar o caminho da rede Ex.: \\NomePc\Musica... Fiz tudo que encontrei na NET em relação a isso... 

    Além disso, após conseguir retornar a ListBox com as musicas.mp3 disponíveis, na minha interface há um botão play que possibilitará o usuário ouvir uma prévia da música escolhida selecioná-la; ai então gravaremos no banco o nome da música entre outras informações.

    Aproveitando, temos uma outra característica, que acredito estar ligada a questão acima; trata-se de um LOG DE SISTEMA em arquivo texto que deverá também ser gravado no diretório da aplicação. Utilizando o um dos comando acima funcionou em ambiente de desenvolvimento mas no servidor não gera o arquivo.

    Por favor se alguém puder me dar uma luz agradeço!!!

    []'


    Eduardo Agostinho Analista Programador - C# Developer

    quarta-feira, 8 de maio de 2013 17:36

Respostas

Todas as Respostas

  • Olá Eduardo,

    Quanto a recuperar o caminho físico de um subpasta do root da aplicação asp.net, costumo utilizar o comando abaixo:

    Server.MapPath(@"~/Subpasta/")

    Como você está utilizando silverlight o qual nunca trabalhei, mas que até onde sei ele roda no browser cliente (como flash) (diferente do código asp.net e WCF que roda no servidor), terá que verificar se esta aplicação não está mapeando com base na máquina cliente e tentando acessar os caminhos compartilhados/fisicos a partir dela. Sendo assim, mesmo você compartilhando a pasta, terá que verificar se a máquina cliente possui rota e permissões para acessar esta.

    Se fosse uma aplicação asp.net/WCF publicada no IIS, bastaria a pasta em questão ter permissões de leitura para o usuário IUSR (se estiver utilizando autenticação anônima com o usuário do IIS) que este conseguiria acessar o arquivo para leitura.

    quarta-feira, 8 de maio de 2013 19:22
  • Olá Eduardo,

    Quanto a recuperar o caminho físico de um subpasta do root da aplicação asp.net, costumo utilizar o comando abaixo:

    Server.MapPath(@"~/Subpasta/")

    Como você está utilizando silverlight o qual nunca trabalhei, mas que até onde sei ele roda no browser cliente (como flash) (diferente do código asp.net e WCF que roda no servidor), terá que verificar se esta aplicação não está mapeando com base na máquina cliente e tentando acessar os caminhos compartilhados/fisicos a partir dela. Sendo assim, mesmo você compartilhando a pasta, terá que verificar se a máquina cliente possui rota e permissões para acessar esta.

    Se fosse uma aplicação asp.net/WCF publicada no IIS, bastaria a pasta em questão ter permissões de leitura para o usuário IUSR (se estiver utilizando autenticação anônima com o usuário do IIS) que este conseguiria acessar o arquivo para leitura.

    Prezado Diego, boa tarde

    Primeiramente obrigado pela ajuda!

    Exatamente com o comando que você sugeriu, quando publico no servidor IIS ele busca o caminho no PC CLIENT e não no SERVIDOR do IIS.

    Caminho no IIS: C:\inetpub\wwwroot\MinhaApp\Musicas


    Eduardo Agostinho Analista Programador - C# Developer


    • Editado EAgostinho quarta-feira, 8 de maio de 2013 19:49
    quarta-feira, 8 de maio de 2013 19:48
  • Certo... aconselharia para você o tratamento que faço com fotos:

    - No IIS, mapeio um diretório virtual apontando para a pasta que contém os arquivos e dou permissão para o usuário IUSR ler essa pasta;

    - Na sua aplicação, você acessa esses arquivos via a URL conforme o caminho virtual;

    Abçs,

    quarta-feira, 8 de maio de 2013 21:04
  • Certo... aconselharia para você o tratamento que faço com fotos:

    - No IIS, mapeio um diretório virtual apontando para a pasta que contém os arquivos e dou permissão para o usuário IUSR ler essa pasta;

    - Na sua aplicação, você acessa esses arquivos via a URL conforme o caminho virtual;

    Abçs,

    Bom dia Diego

    OK! Configurei a pasta no IIS conforme você sugeriu, porém, não estou encontrando uma forma de acessar a lista dos arquivos passando a URL pelo C# ou WCF.

    Por favor, você não poderia me enviar um exemplo de código para isso?

    Desde já agradeço

    []'


    Eduardo Agostinho Analista Programador - C# Developer

    quinta-feira, 9 de maio de 2013 11:32
  • Eduardo, se você pegar a URL de um arquivo, você consegue acessá-lo via browser? No caso, você queria percorrer o diretório e listar os arquivos também?

    Para imagens, eu somente atribuo a URL para a propriedade do caminho dela.

    Abraços.

     
    quinta-feira, 9 de maio de 2013 13:44
  • Eduardo, se você pegar a URL de um arquivo, você consegue acessá-lo via browser? No caso, você queria percorrer o diretório e listar os arquivos também?

    Para imagens, eu somente atribuo a URL para a propriedade do caminho dela.

    Abraços.

     

    Olá

    Estando a aplicação publicada no IIS do HOST<nomeServidorWeb>, se eu digito no browser do meu TERMINAL DE TRABALHO: 

    http://nomeServidorWeb/minhaAplicacao/Musicas/Chimes.mp3

    Através do plugin do navegador a musica toca... O que preciso é pegar todas as músicas e listar em um ListBox.

    Já estou a dias pesquisando sabe, e alguns lugares que li, há quem diga que isso não é possível via silverlight, não consigo acreditar... Eu fiz uma provinha de conceito em ASP.NET e consegui popular o listBox com o nome das músicas... Realmente complicado...

    Mais uma vez muito obrigado pela ajuda.


    Eduardo Agostinho Analista Programador - C# Developer


    • Editado EAgostinho quinta-feira, 9 de maio de 2013 13:54
    quinta-feira, 9 de maio de 2013 13:53
  • A princípio, se você está conseguindo reproduzir por esta URL, então já é um bom começo.

    Vamos lá em relação a listagem: até é possível você listar o conteúdo de uma pasta do IIS, porém, para isto terá que dar permissões de pesquisa para o IUSR, o que permite um usuário entrar via browser e ficar xeretando a pasta.

    Acredito que a melhor forma seria você passar essa lista por um método do WCF. Você poderia passar o nome da música e a URL, alimentando assim seu listBox.

    Se o ListBox do Silverlight for semelhante ao asp.net, você terá para cada item um nome e um valor, no nome você passa o nome da música e no valor a URL.


    quinta-feira, 9 de maio de 2013 14:14
  • Tentei também com WCF... Olhe abaixo:

    O serviço abaixo está na mesma pasta da aplicação.

    public List<string> ConsultaArquivoMusicas()
            {
                List<string> vListaArquivosMusicas = new List<string>();
                ncErro = null;
    
                try
                {
                    ncCaminhoApp = System.Web.Hosting.HostingEnvironment.MapPath("~/") + "Musicas\\";
                                   
                    System.IO.DirectoryInfo directoryInfo = new System.IO.DirectoryInfo(ncCaminhoApp);
                    System.IO.FileInfo[] filesInfo = directoryInfo.GetFiles("*.mp3");
                    foreach (System.IO.FileInfo fi in filesInfo)
                    {
                        vListaArquivosMusicas.Add(fi.Name);
                    }
    
                    return vListaArquivosMusicas;
                }
                catch (Exception ex)
                {
                    ncErro = ex.Message;
                    return vListaArquivosMusicas;
                }
            }

    Da forma que o serviço está acima, ele procura pelos arquivos no caminho (ncCaminhoApp) do PC CLIENTE e não do servidor.


    Eduardo Agostinho Analista Programador - C# Developer


    • Editado EAgostinho quinta-feira, 9 de maio de 2013 17:18
    quinta-feira, 9 de maio de 2013 17:17
  • No WCF, utilize conforme indiquei anteriormente:

    Server.MapPath(@"~/Subpasta/")
    quinta-feira, 9 de maio de 2013 17:55
  • Resolvido...

    Se alguém precisar: http://social.msdn.microsoft.com/Forums/en-US/silverlightnet/thread/12b41e1b-8ca1-4411-a6c7-679b9a80334c



    Eduardo Agostinho Analista Programador - C# Developer

    • Marcado como Resposta EAgostinho quinta-feira, 23 de maio de 2013 17:28
    quinta-feira, 23 de maio de 2013 17:28