部署后.Net未授权访问异常

时间:2016-02-02 17:12:13

标签: c# asp.net exception iis-7.5

我将内部Web应用程序部署到服务器A,并在向服务器B上的网络驱动器创建文件时出错。如果我在本地运行,则文件已在服务器B上成功创建。

  

System.UnauthorizedAccessException:拒绝访问路径'\\ b \ folder \ test.pdf'。

应用程序池的标识是networkservice。我给网络服务完全控制了服务器B上的目标文件夹。我甚至给了Everyone完全控制权,但它仍然有错误。

服务器A运行.NET 7.5。创建文件的代码:

var byteArray = generateArray();
var destination = "\\\\b\\folder\\test.pdf";
try {
    var destinationFile = new FileInfo(destination);
    if (destinationFile.Exists) {
        destinationFile.Delete();
    }
    System.IO.File.WriteAllBytes(destination, byteArray);
} catch (UnauthorizedAccessException) {
    //
}

我看到有人遇到完全相同的问题here。但它并没有解决我的问题。

解决方案: 我将身份更改为管理员帐户,而不是将network service用于应用程序池。它有效,但我不完全理解为什么它的工作原理。因为A上的网络服务与B上的网络服务不同?

1 个答案:

答案 0 :(得分:0)

即使您提供了对所有人的访问权限,某些应用程序也必须获得特定权限。这是Window Vista中引入的UAC系统的一部分。此举旨在提高安全性,因此应用程序无法在任何用户下运行,并且基本上具有完全访问权限。

您应该做什么,在目录上提供以下访问权限:

IIS AppPool\NameOfAppPool

这将提供对您的托管Web应用程序到该目录的特定访问,因为IIS将能够正确地操作该目录。在编写或阅读之前,您可以实现的一些代码可以帮助验证:

public static bool ValidateIOPermission(string path)
{
     try
     {
          if(Directory.Exist(path))
               return true;

          else { Directory.CreateDirectory(path); }
     }

     catch(Exception ex) { return false; }
}

上面的代码是一个小样本,基本上是尝试执行操作并捕获异常,这样就知道你是否有访问权。