我正在处理的项目的一个要求是根据特定条件将文件导出到网络共享。当我在visual studio中运行代码时它工作得很好但是当我部署它时会启动保存文件的操作失败。用户会看到以下警告:
Could not find file '<full filename...>'.
在web.config中,我将impersonate设置为true,并且用户有权写入相关的网络共享。
以下是写入文件的代码:
using (System.IO.FileStream fs = new System.IO.FileStream(fullpath, System.IO.FileMode.Create))
{
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(fs))
{
sw.WriteLine(RouteMeter.HeaderString);
foreach (RouteMeter meter in rm)
{
sw.WriteLine(meter);
}
}
}
答案 0 :(得分:2)
有许多变量可能导致用户模拟失败,在这种情况下,IIS会尝试以匿名用户身份执行操作。您是否在尝试写入文件之前验证用户是否已正确验证?
如果启用了模拟 ASP.NET应用程序,该应用程序 在身份的背景下运行 其访问令牌IIS传递给 ASP.NET。该令牌可以是一个 经过身份验证的用户令牌,例如 登录Windows用户的令牌, 或IIS为匿名用户提供的令牌(通常是 IUSR_MACHINENAME标识)。
答案 1 :(得分:0)
我怀疑这里更好的方法是将app-pool的身份设置为具有访问权限(无模仿)。另外,确保使用UNC路径 - 不是网络共享名称(“\\ foo \ bar”,而不是“f:”等)。