我将内部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) {
//
}我看到有人遇到了同样的问题,这里。但它并没有解决我的问题。
解决方案:I将身份更改为管理员帐户,而不是对应用程序池使用network service。它起作用了,但我不完全明白它为什么会起作用。因为A上的网络服务不同于B上的网络服务?
发布于 2016-02-02 17:18:36
尽管您为每个人提供了访问权限,但某些应用程序必须获得特定的许可。这是Window中引入的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; }
}上面的代码是一个小示例,基本上试着执行操作并捕获异常,这样您就可以知道是否有访问权限。
https://stackoverflow.com/questions/35159661
复制相似问题