2

我有一个网络应用程序,用户可以在其中上传文件。这些文件由 IIS 物理存储在映射到外部存储设备的虚拟文件夹中。每个上传文件的记录都存储在数据库中。数据库记录包含有关文件是否仍然“活动”(尚未被用户删除)和虚拟文件夹路径(例如:/storage1/test)的信息

现在,我想定期在 IIS 之外运行一个管理任务,该任务检索所有不再“活动”的文件的列表,并从物理存储中删除这些文件。我希望管理任务在 IIS 之外作为计划任务或 Windows 服务运行。但是,我无法弄清楚如何在外部进程中将存储在数据库记录中的虚拟文件夹路径映射到物理路径。有没有办法从外部进程或任何其他聪明的方式“利用”到 IIS?(或者我完全走错了方向)。

TIA /亨里克

4

3 回答 3

2

您需要在项目中添加对 System.Web 的引用。

string path = System.Web.HttpServerUtility.MapPath("/MyWebSite");
于 2009-03-18T12:44:13.847 回答
0

如果您的应用程序是 ASP.NET 应用程序,则可以调查 Server.MapPath 调用 - 如果您使用与主应用程序相同的虚拟目录。

否则,我建议将“基本路径”(对应于虚拟目录路径)存储在您的外部应用程序的配置中,并将该基本路径和文件路径连接成一个完整路径。

马克

于 2009-03-18T11:37:00.187 回答
0

如果您需要以编程方式检索此路径,则可以执行以下操作:

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

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

有几点需要注意:

  • 1构造函数路径中的 数字“ ”DirectoryEntry是站点的 IIS 编号。

  • 在 path IIS://Localhost/w3svc/1/root/storage1/test中,第一部分 IIS://Localhost/w3svc/1/root是您网站的“根”应用程序。你总是需要这部分。

  • 您需要将System.DirectoryServices 程序集的引用添加到您的项目中。

于 2009-03-18T11:46:51.193 回答