C# 对IIS上路径的访问被拒绝

C# 对IIS上路径的访问被拒绝,c#,asp.net-mvc,iis,iis-8.5,C#,Asp.net Mvc,Iis,Iis 8.5,我正试图让我的MVC应用程序使用System.IO.file.writealText将一个简单的文本文件写入另一台服务器。(另一个进程正在该文件夹中查找要抓取的文本文件。)在我的本地计算机上调试时,它可以正常工作,但当部署到测试服务器上的IIS时,我在尝试写入文件时总是遇到以下错误: 对路径“\\server\C$\folder\subfolder\file.txt”的访问被拒绝 这里至少有六个类似问题的答案是,允许应用程序池标识帐户访问该文件夹。但是,IIS上的应用程序池已在具有所需文件夹的完

我正试图让我的MVC应用程序使用
System.IO.file.writealText
将一个简单的文本文件写入另一台服务器。(另一个进程正在该文件夹中查找要抓取的文本文件。)在我的本地计算机上调试时,它可以正常工作,但当部署到测试服务器上的IIS时,我在尝试写入文件时总是遇到以下错误:

对路径“\\server\C$\folder\subfolder\file.txt”的访问被拒绝

这里至少有六个类似问题的答案是,允许应用程序池标识帐户访问该文件夹。但是,IIS上的应用程序池已在具有所需文件夹的完全权限的服务帐户下运行,但仍收到错误。我甚至尝试将应用程序池更改为我自己的帐户(调试中成功使用的帐户),但仍然出现错误

关闭匿名访问,并打开Windows身份验证(部分
文件.txt
是来自用户广告帐户的信息)。我尝试使用多个广告帐户访问应用程序,无论是否访问
\\server\C$\folder\subfolder\
,但它们都给出相同的错误


我不知道该应用程序如何在授权帐户下运行,用户可以使用授权帐户登录该应用程序,但仍然会出现访问被拒绝错误。有没有办法获得更多关于哪些访问被拒绝或哪个帐户被拒绝的信息?我还缺少什么吗?

首先,您可以尝试授予IUSR用户对您要在其中写入文本文件的文件夹的写入权限

有一种方法可以通过在web.config文件中使用模拟标记来模拟asp.net应用程序中的用户,但我认为这可能很危险

  <identity impersonate="true" userName="nomducompte" password="motdepasse" />


我希望这会有所帮助。

首先,您可以尝试授予IUSR用户对要在其中写入文本文件的文件夹的写入权限

有一种方法可以通过在web.config文件中使用模拟标记来模拟asp.net应用程序中的用户,但我认为这可能很危险

  <identity impersonate="true" userName="nomducompte" password="motdepasse" />


我希望这有帮助。

您需要检查其他进程是否已打开该文件,例如,“一个单独的进程正在该文件夹中查找要抓取的文本文件”-可能此单独进程已打开该文件,因此正在锁定您的IIS进程?使用进程监视器()监视文件上的活动

您还可以将文件位置指定为“\server\C$\folder\subfolder\file.txt”。UNC路径通常以“\\”开头,例如“\\server\C$\folder\subfolder\file.txt”。这可能只是StackOverflow将双斜杠转义为单斜杠的产物

作为一个简单的测试,您可以使用记事本和您自己的帐户打开错误消息中的文件并写入该文件吗?如果您使用应用程序池标识帐户怎么办


编辑:在具有文件位置的服务器上运行Process Monitor。添加如下所示的路径筛选器:

Path   excludes    file.txt   then  Exclude

其中file.txt是正在监视的文件的文件名(不带目录)。此筛选器将仅捕获该文件的事件,并将排除所有其他内容。事件发生后,右键单击它,然后转到“属性”、“进程”以查看发起事件的用户。

您需要检查其他进程是否已打开该文件,例如,“一个单独的进程正在该文件夹中查找要抓取的文本文件”-这个单独的进程可能已经打开了文件,因此正在锁定您的IIS进程?使用进程监视器()监视文件上的活动

您还可以将文件位置指定为“\server\C$\folder\subfolder\file.txt”。UNC路径通常以“\\”开头,例如“\\server\C$\folder\subfolder\file.txt”。这可能只是StackOverflow将双斜杠转义为单斜杠的产物

作为一个简单的测试,您可以使用记事本和您自己的帐户打开错误消息中的文件并写入该文件吗?如果您使用应用程序池标识帐户怎么办


编辑:在具有文件位置的服务器上运行Process Monitor。添加如下所示的路径筛选器:

Path   excludes    file.txt   then  Exclude

其中file.txt是正在监视的文件的文件名(不带目录)。此筛选器将仅捕获该文件的事件,并将排除所有其他内容。事件发生后,右键单击它,然后转到“属性”、“处理”以查看发起事件的用户。

如下面的@Polyfun注释所示,请确认路径确实正确(以双斜杠开头),并且上面显示的只是复制/粘贴或转录问题。@GalacticCowboy我检查过了,代码正确无误(加上它可以在调试中工作)。因此,在显示时,标记只是将两个斜杠计算为一个“转义”斜杠。如下面的@Polyfun注释所示,请确认路径是否正确(以双斜杠开始)上面显示的只是复制/粘贴或转录问题。@GalacticCowboy我检查了代码,代码正确无误(加上它在调试中工作)。因此,markdown在显示时将两个斜杠作为一个“转义”斜杠计算。“抓取”可能是一个糟糕的单词选择。查找文件的过程只是读取它们,并且是由其他事件触发的,因此此时没有锁定文件。单个“\”是对字符进行转义的;代码和错误都有2。我确实尝试使用代码和错误中给出的路径从测试服务器的记事本中打开文件它确实有效。Process Monitor在尝试打开文件时应该告诉您IIS使用的标识/帐户-这是您期望的帐户吗?我以前没有使用Process Monitor。现在尝试。我需要查看IIS服务器还是具有文件位置的服务器?您在具有文件位置的服务器上运行Process Monitor为文件名添加一个筛选器。它将显示访问该文件的所有进程/标识,以及任何错误。