我有一个ASP.NET应用程序,它需要将文件保存到网络共享(桑巴)。
份额需要用户名和密码进行连接。
我已经映射了一个持久到共享驱动器和提供的登录凭证,同时登录到服务器域\ WEBUSER。
我已经改变了它承载我的应用程序使用域\ WEBUSER帐户,而不是IWAM账号的虚拟目录。
但是用户仍然无法看到映射驱动器。
我在想什么呢?
我有一个ASP.NET应用程序,它需要将文件保存到网络共享(桑巴)。
份额需要用户名和密码进行连接。
我已经映射了一个持久到共享驱动器和提供的登录凭证,同时登录到服务器域\ WEBUSER。
我已经改变了它承载我的应用程序使用域\ WEBUSER帐户,而不是IWAM账号的虚拟目录。
但是用户仍然无法看到映射驱动器。
我在想什么呢?
最好是使用UNC,如果你能为映射驱动器通常都与交互式用户和虚拟目录可能与服务或netwrok登录类型的连接。
另一种可能的修复在此知识库文章中描述的错误,当您配置IIS以使用Samba网络共享作为其根发生 。 摘录如下。
重要这些步骤可能会增加安全风险。 这些步骤还可能导致被恶意用户或恶意软件的计算机或网络更容易受到攻击,如病毒。 我们之所以推荐本文介绍以使程序能够按照它们被设计为运行或者为了实现特定的程序功能的过程。 在进行这些变化,我们建议您评估与您的特定环境中实施这一过程带来的风险。 如果您决定实施此过程,采取任何适当的附加措施来帮助保护系统。 我们建议您使用此过程只如果你真的需要这个过程。
警告此方法涉及安全风险,因为谁创造了映射,用户必须保持登录到本地控制台。 因此,唯一的安全是通过锁定计算机。 要解决此问题,请执行以下操作:
- 映射一个驱动器号\服务器\ iisroot使用“根”和“密码”。
- 在桑巴虚拟目录,更改另一台计算机上本地目录从共享的主目录,然后指定您在步骤1中映射的驱动器号。
- 重新启动Web站点,然后通过浏览测试。
你有没有尝试在映射代码的驱动? 下面是这样做只是一类...
public static class NetworkDrives
{
public static bool MapDrive(string DriveLetter, string Path, string Username, string Password)
{
bool ReturnValue = false;
if(System.IO.Directory.Exists(DriveLetter + ":\\"))
{
DisconnectDrive(DriveLetter);
}
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "net.exe";
p.StartInfo.Arguments = " use " + DriveLetter + ": " + Path + " " + Password + " /user:" + Username;
p.Start();
p.WaitForExit();
string ErrorMessage = p.StandardError.ReadToEnd();
string OuputMessage = p.StandardOutput.ReadToEnd();
if (ErrorMessage.Length > 0)
{
throw new Exception("Error:" + ErrorMessage);
}
else
{
ReturnValue = true;
}
return ReturnValue;
}
public static bool DisconnectDrive(string DriveLetter)
{
bool ReturnValue = false;
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "net.exe";
p.StartInfo.Arguments = " use " + DriveLetter + ": /DELETE";
p.Start();
p.WaitForExit();
string ErrorMessage = p.StandardError.ReadToEnd();
string OuputMessage = p.StandardOutput.ReadToEnd();
if (ErrorMessage.Length > 0)
{
throw new Exception("Error:" + ErrorMessage);
}
else
{
ReturnValue = true;
}
return ReturnValue;
}
}
它已经有一段时间(6或8年),因为我已经做了这样的事情,但我记得,我还必须运行应用程序池作为有访问网络共享,以便IIS能够域用户从它来提供文件。