Pergunta

Eu tenho um aplicativo web onde os usuários podem fazer upload de arquivos. Os arquivos são armazenados fisicamente pelo IIS em uma pasta virtual que é mapeado para um dispositivo de armazenamento externo. Um registro sobre cada arquivo enviado é armazenado no banco de dados. O registro de banco de dados contém informações sobre se o arquivo ainda é "ativa" (não tenha sido excluído pelo usuário), e o caminho da pasta virtual (ex: / Armazenamento1 / ensaio)

Agora, eu gostaria de, periodicamente, executar um fora tarefa administrativa IIS que recupera uma lista de todos os arquivos que não são mais "ativo" e exclui esses de armazenamento físico. Eu gostaria que a tarefa administrativa para executar fora do IIS como uma tarefa ou janelas serviço programado. No entanto, eu não consigo descobrir como mapear o caminho da pasta virtual que armazenado no registro de banco de dados para um caminho físico, no processo externo. Existe alguma maneira de "tap" em IIS de um processo externo ou de qualquer outra forma inteligente de fazer isso? (Ou eu estou indo na direção errada ao todo).

TIA / Henrik

Foi útil?

Solução

Você precisará adicionar uma referência para System.Web em seu projeto.

string path = System.Web.HttpServerUtility.MapPath("/MyWebSite");

Outras dicas

Se seu aplicativo é um aplicativo ASP.NET, você poderia investigar a chamada Server.MapPath -. Se você estiver usando o mesmo diretório virtual como o aplicativo principal

Caso contrário, eu sugiro armazenar o "caminho base" (que corresponde ao caminho do diretório virtual) em uma configuração para seu aplicativo externo e apenas concatenar esse caminho base e o caminho do arquivo para um caminho completo.

Marc

Se você precisa recuperar esse caminho de forma programática, em seguida, você pode fazer algo como:

using(DirectoryEntry de = 
    new DirectoryEntry("IIS://Localhost/w3svc/1/root/storage1/test"))
{
    string pathToFiles = de.Properties["Path"].Value;

    // Do my file tidy up tasks....
}

Há um par de coisas a nota:

  • O número '1' no caminho do construtor DirectoryEntry é o número IIS do site.

  • No caminho IIS://Localhost/w3svc/1/root/storage1/test, a primeira parte IIS://Localhost/w3svc/1/root é aplicação do seu website 'root'. Você precisa sempre esta parte.

  • Você precisa adicionar uma referência para o System.DirectoryServices montagem para seu projeto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top