Pregunta

Tengo una aplicación web donde los usuarios pueden cargar archivos. IIS almacena físicamente los archivos en una carpeta virtual que se asigna a un dispositivo de almacenamiento externo. Un registro sobre cada archivo cargado se almacena en la base de datos. El registro de la base de datos contiene información sobre si el archivo todavía está "activo". (no ha sido eliminado por el usuario), y la ruta de la carpeta virtual (ej: / storage1 / test)

Ahora, me gustaría, periódicamente, ejecutar una tarea administrativa fuera de IIS que recupere una lista de todos los archivos que ya no están " activos " y los elimina del almacenamiento físico. Me gustaría que la tarea administrativa se ejecute fuera de IIS como una tarea programada o servicio de Windows. Sin embargo, no puedo entender cómo asignar la ruta de la carpeta virtual que se almacenó en el registro de la base de datos a una ruta física, en el proceso externo. ¿Hay alguna forma de `` tocar ''? en IIS desde un proceso externo o cualquier otra forma inteligente de hacer esto? (o voy en la dirección equivocada por completo).

TIA / Henrik

¿Fue útil?

Solución

Deberá agregar una referencia a System.Web en su proyecto.

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

Otros consejos

Si su aplicación es una aplicación ASP.NET, puede investigar la llamada Server.MapPath, si está utilizando el mismo directorio virtual que la aplicación principal.

De lo contrario, sugeriría almacenar la " ruta de base " (que corresponde a la ruta del directorio virtual) en una configuración para su aplicación externa y simplemente concatena esa ruta base y la ruta del archivo en una ruta completa.

Marc

Si necesita recuperar esta ruta mediante programación, puede hacer 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....
}

Hay un par de cosas a tener en cuenta:

  • El número ' 1 ' en la ruta del El constructor DirectoryEntry es el Número IIS del sitio.

  • En el camino IIS: // Localhost / w3svc / 1 / root / storage1 / test , la primera parte IIS: // Localhost / w3svc / 1 / root es la aplicación 'raíz' de su sitio web. Siempre necesitas esta parte.

  • Debería agregar una referencia a el System.DirectoryServices ensamblaje a su proyecto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top