Usuário com melhor resposta
Acesso a sub-pasta da aplicação do IIS no WINDOWS 2008 SERVER

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
Respostas
-
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
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.
-
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
-
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,
-
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
-
-
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
-
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.
-
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
-
-
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