1

我想将 pdf 从共享文件夹复制到项目文件夹。所以我使用 System.IO.File.Copy:

System.IO.File.Copy(@"\\netstore\IT\SIGN\112454.pdf", "C:\inetpub\wwwroot\myaspmvcwebapisite\temp\112454.pdf", true);

当我在我的机器上本地运行应用程序但当我将它发布到服务器并转到我得到的站点时,该文件会复制:

signature-service.ts:120 {"$id":"1","Message":"An error has occurred.","ExceptionMessage":"Access to the path '\\\\netstore\\IT\\SIGN\\112454.pdf' is denied.","ExceptionType":"System.UnauthorizedAccessException","StackTrace":"   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)\r\n   at System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite, Boolean checkHost)\r\n   at System.IO.File.Copy(String sourceFileName, String destFileName, Boolean overwrite)\r\n   at api.valbruna.local.Controllers.ValShip.SignatureController.Post(Int32 id)"}

如何授予对站点的访问权限以访问该文件位置?

请注意:

  • 该站点是一个 MVC Web API INTRANET 应用程序
  • 它使用基于 Windows 的身份验证
  • 当我说本地主机时,我的意思是在视觉工作室(IISExpress)中

我试过的:

  • 授予每个人对文件夹 \\netstore\IT\SIGN\ 的访问权限

我查看了堆栈溢出的其他帖子(拒绝访问路径),但大多数答案都说授予对 IIS_USRS 的访问权限,并且我已授予每个人访问权限,因此这不起作用。

---更新1---

@Chris Pratt 我已根据您提供的链接更新了我的 IIS 设置。

  1. 身份字段已从 NetworkService 更新为 ApplicationPoolIdentity。

在此处输入图像描述

  1. 我授予对<domainname>\<machinename>$

在此处输入图像描述

---更新2---

@jp2code 我打开了网络发现,但仍然遇到同样的错误。

在此处输入图像描述

---更新3---

作为使用Impersonation 类的临时解决方法,可以访问共享文件夹:

using (new Impersonator("username", System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName, "password"))
{
    // code that executes under the new context.
    sizingDoc.LoadFromFile(sigDocUrl);
}
4

1 回答 1

1

您是说它在本地 IIS 或 Visual Studio (IIS Express) 中托管时运行良好?IIS Express 在活动用户帐户下运行,但 IIS 在应用程序池的标识下运行。授予对 IIS_USRS 的访问权限对于本地目录就足够了,但远程目录将需要身份验证,这意味着它将通过应用程序池的身份进行身份验证。Microsoft 的这篇文章可能会为您提供一些额外的指导,帮助您启动和运行它。

但是,无需自定义任何内容,App Pool 作为网络服务运行这一事实应该足以让您授予访问权限。网络服务通过机器帐户 ( <domainname>\<machinename>$) 授权。因此,如果您为该帐户授权网络共享,您应该很好。

于 2016-09-23T17:24:45.210 回答