【问题标题】:Can't access to network share from application无法从应用程序访问网络共享
【发布时间】: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$ 帐户还是登录用户的域帐户?

【问题讨论】:

标签: asp.net-mvc iis


【解决方案1】:

据我所知,如果您使用网络服务帐户作为身份,您仍然需要在共享文件夹上添加足够的权限,因为网络服务和本地系统都以计算机帐户(DOMAIN\计算机$)。

详细步骤如下:

1.右击comture,点击属性,你会看到你的电脑名称如下:

2.转到您的共享文件夹服务器,右键单击该文件夹并单击属性。然后你可以像这样 (Domain\Servername$) 将你的服务器帐户添加到它

【讨论】:

  • 它解决了我的问题。但是我们已经成功地创建了域用户并在 IIS 中使用了这个帐户。
猜你喜欢
  • 2014-01-08
  • 2012-12-23
  • 2010-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-28
相关资源
最近更新 更多