【发布时间】:2019-06-26 12:36:02
【问题描述】:
我在从 MVC 应用程序访问网络共享时遇到问题。
应用程序托管在安装在名为 INTRANET 的远程计算机上的 IIS 上,该计算机连接到同一个域。
网站正在使用为Network Service 配置的应用程序池。启用了匿名和windows身份验证。
当我在本地调试应用程序时(IIS Express 和 Visual Studio 以管理员身份打开)没有问题。我可以访问网络共享和下载文件。
将应用程序发布到INTRANET 后出现问题。我打开网络浏览器,转到http://intranet/,使用我的域凭据登录,然后我尝试调用需要访问 UNC 共享的操作。然后报错:
路径 \\MyServer\MyShare\MyFolder 的访问被拒绝
控制器动作如下所示:
public ActionResult DownloadAttachment(int id)
{
try
{
using (var ctx = new SyzyfContext())
{
var taskId = ctx.ZgloszeniePlik.Where(zp => zp.ID == id).First().ZgloszenieId;
var file = ctx.ZgloszeniePlik.Where(zp => zp.ID == id).First().nazwa;
var fileLof = file.LastIndexOf(".") + 1;
var fileLen = file.Length;
var fileLofs = file.LastIndexOf(@"\") + 1;
var fileName = file.Substring(fileLofs, fileLen - fileLofs);
var fileToCopy = @"\\Alicja2\Zadania_rep\rep" + id.ToString("D6") + ".fle";
var newFile = @"\\Agata\Repozytorium\" + taskId.ToString() + @"\" + fileName;
if (!Directory.Exists(@"\\Agata\Repozytorium\" + taskId.ToString()))
{
Directory.CreateDirectory(@"\\Agata\Repozytorium\" + taskId.ToString());
}
using (var input = new FileStream(fileToCopy, FileMode.Open, FileAccess.Read, FileShare.Read))
{
if (!System.IO.File.Exists(newFile))
{
using (var outputFile = new FileStream(newFile, FileMode.Create))
{
var buffer = new byte[0x10000];
int bytes;
while ((bytes = input.Read(buffer, 0, buffer.Length)) > 0)
{
outputFile.Write(buffer, 0, bytes);
}
}
}
}
byte[] fileBytes = System.IO.File.ReadAllBytes(newFile);
return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
}
}
catch (Exception ex)
{
ViewBag.Message = ex.Message;
return View("Error");
}
}
我想我误解了整个 IIS 配置。据我所知,当为网络服务配置应用程序池时,它总是使用DOMAIN\MACHINE$ 帐户(域将其视为计算机对象)。因此,我已将该 UNC 共享的完全控制权限授予MACHINE$ 帐户。它仍然不起作用。
当用户尝试调用上述操作时,应用程序使用什么登录?它使用DOMAIN\MACHINE$ 帐户还是登录用户的域帐户?
【问题讨论】:
-
stackoverflow.com/questions/10736790/… 参考此链接。我假设它不是 ASP.Net Core
-
@r2018 哦,忘了说,是ASP.Net Framework MVC
-
然后尝试链接,它应该可以工作。如果没有,请分享错误消息,然后我们可以尝试提供帮助。
标签: asp.net-mvc iis