我有一个用户可以上传文件的网络应用。这些文件由IIS物理存储在映射到外部存储设备的虚拟文件夹中。 有关每个上载文件的记录存储在数据库中。数据库记录包含有关文件是否仍处于“活动”状态(尚未被用户删除)和虚拟文件夹路径(例如:/ storage1 / test)
的信息现在,我想定期在IIS外部运行一个管理任务,检索不再“活动”的所有文件的列表,并从物理存储中删除这些文件。 我希望管理任务在IIS外部作为计划任务或Windows服务运行。 但是,我无法弄清楚如何将存储在数据库记录中的虚拟文件夹路径映射到外部进程中的物理路径。有没有办法从外部进程或任何其他智能方式“点击”进入IIS? (或者我完全走错了方向)。
TIA /亨里克
答案 0 :(得分:2)
您需要在项目中添加对System.Web的引用。
string path = System.Web.HttpServerUtility.MapPath("/MyWebSite");
答案 1 :(得分:0)
如果您的应用是ASP.NET应用,则可以调查Server.MapPath调用 - 如果您使用与主应用相同的虚拟目录。
否则,我建议将“基本路径”(对应于虚拟目录路径)存储在外部应用程序的配置中,并将该基本路径和文件路径连接成一个完整的路径。
马克
答案 2 :(得分: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号。
在路径中
IIS://Localhost/w3svc/1/root/storage1/test
,
第一部分
IIS://Localhost/w3svc/1/root
是
您网站的“根”应用程序。
你总是需要这个部分。
您需要添加引用
System.DirectoryServices
装配到你的项目。