无法从应用程序访问网络共享

时间:2019-06-26 12:36:02

标签: asp.net-mvc iis

我从MVC应用程序访问网络共享时遇到问题。

应用程序托管在名为INTRANET的远程计算机上的IIS上,该计算机连接到同一域。

网站正在使用为Network Service配置的应用程序池。启用了匿名和Windows身份验证。

当我在本地调试应用程序(以管理员身份打开IIS Express和Visual Studio)时,没有问题。我可以访问网络共享并下载文件。

将应用程序发布到INTRANET后,会出现问题。我打开网络浏览器,转到http://intranet/,使用域凭据登录,然后尝试调用需要访问UNC共享的操作。然后有一个错误:

  

拒绝访问路径\\ MyServer \ MyShare \ MyFolder

Controller Action看起来像这样:

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$帐户还是登录用户的域帐户?

1 个答案:

答案 0 :(得分:1)

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

详细步骤如下:

1。右键单击该修饰符并单击属性,您将找到如下的计算机名称:

enter image description here

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

enter image description here