在我的网络应用程序中,我有一些正在保存在应用程序中的文件,它正在创建一个用于保存文件的文件夹,但我需要将这些文件保存在应用程序之外和 IIS 内。我可以做这个? 在应用程序文件夹中,我们使用下面的代码
Server.MapPath(Path)
在IIS中保存如何编写?
谢谢
答案 0 :(得分:0)
您需要创建一个指向外部文件夹的虚拟目录。 右键单击您的网站转到IIS。单击菜单中的Add Virtual directry。为目录选择一个别名,选择所需的文件夹,然后就完成了。它会将此外部文件夹视为内部文件夹,并以相同的方式工作。点击此链接How to: Create and Configure Virtual Directories in IIS 7.0
免责声明:但是在托管到iis之后你必须这样做,即发布。在开发环境中使用visual studio,即调试它只会存储在内部目录中
编辑:对于创建虚拟目录,这是代码。我没有测试它的有效性。
static void CreateVDir(string metabasePath, string vDirName, string physicalPath)
{
// metabasePath is of the form "IIS://<servername>/<service>/<siteID>/Root[/<vdir>]"
// for example "IIS://localhost/W3SVC/1/Root"
// vDirName is of the form "<name>", for example, "MyNewVDir"
// physicalPath is of the form "<drive>:\<path>", for example,"C:\Inetpub\Wwwroot"
try
{
DirectoryEntry site = new DirectoryEntry(metabasePath);
string className = site.SchemaClassName.ToString();
if ((className.EndsWith("Server")) || (className.EndsWith("VirtualDir")))
{
DirectoryEntries vdirs = site.Children;
DirectoryEntry newVDir = vdirs.Add(vDirName, (className.Replace("Service", "VirtualDir")));
newVDir.Properties["Path"][0] = physicalPath;
newVDir.Properties["AccessScript"][0] = true;
// These properties are necessary for an application to be created.
newVDir.Properties["AppFriendlyName"][0] = vDirName;
newVDir.Properties["AppIsolated"][0] = "1";
newVDir.Properties["AppRoot"][0] = "/LM" + metabasePath.Substring(metabasePath.IndexOf("/", ("IIS://".Length)));
newVDir.CommitChanges();
}
else
}
catch (Exception ex)
{
}
}
答案 1 :(得分:0)
通常你不能在根路径之外创建一个文件夹,即如果你的应用程序说C:\inetpub\testapp
,你只能在testapp中创建一个文件夹。此限制是出于安全原因,其中Web服务器不应允许访问根文件夹上的任何内容。
此外,不建议在根文件夹中写入任何文件夹/文件,因为写入根文件夹会导致appdomain在一定数量的写入(默认值为15)后回收,从而导致会话丢失。 See my answer here
但是有一种解决方法
将服务器的路径添加到web.config,然后在您的代码中获取它。在web.config的appsettings部分使用类似下面的内容
<add key="logfilesPath" value="C:\inetpub\MyAppLogs" />
创建上述路径的文件夹,并将Users
组添加到您的文件夹,并为该组授予完全权限(读/写)。 (添加权限非常重要)
在您的代码中,您可以按以下方式获取
string loggerPath = (ConfigurationManager.AppSettings["logfilesPath"]);
希望这有帮助