我在域名为“XXXXXX082.cs.net”的 IIS 服务器上部署了一个 Web 应用程序,当用户提交表单时,该应用程序会尝试在另一台服务器“XXXXXX084.cs.net”上创建一个文件夹,其中“D”驱动器的项目文件夹。
虽然我可以从“XXXXXX082.cs.net”在“XXXXXX084.cs.net”上手动创建文件夹,没有任何问题,但 Web 应用程序始终遇到“访问被拒绝”错误。
我已验证以下内容:
权限:我已检查并确保目标文件夹(“\XXXXXX084.cs.net\D$\projects”)上的共享和 NTFS 权限允许必要的访问。
应用程序池标识:“XXXXXX082.cs.net”上 IIS 应用程序的应用程序池标识设置为“DefaultAppPool”,并且我已授予“XXXXXX084”上“项目”文件夹对“DefaultAppPool”的完全控制访问权限.cs.net”
尽管采取了这些措施,应用程序仍然报告访问被拒绝。我可能缺少什么?我应该采取哪些步骤来排除和解决此问题?
我的网络配置:
<add key="ProjectFilesRootPath" value="\\XXXXXX084.cs.net\projects\" />
我在控制器中创建文件夹的方法。
private string ProjectFolderRootPath
{
get
{
var projectFolderPath=ConfigurationManager.AppSettings().ProjectFilesRootPath;
return projectFolderPath;
}
}
[HttpGet]
public string createProjectFolder(string id, string PName)
{
try
{
string PId= id;
string ProName = PName;
string rootPath = ProjectFolderRootPath.TrimEnd(Path.DirectorySeparatorChar);
string combinedName = $"{PId} {ProName}";
string projectFolderPath = Path.Combine(rootPath, combinedName);
projectFolderPath = projectFolderPath.Replace(Path.DirectorySeparatorChar, '/');
if (!Directory.Exists(projectFolderPath))
{
Directory.CreateDirectory(projectFolderPath);
}
return projectFolderPath;
}
catch (Exception ex)
{
return "Error creating project folder: " + ex.Message;
}
}
我的错误:
Error creating project folder: Access to the path '//XXXXXX084.cs.net/Projects/10215 Test' is denied.
谢谢您的指导。
嗯,当你在这里谈论一些“AppPool”身份时有点令人困惑。
用户仍然是 IIS_USER。
但是,您也没有提及这两台计算机是否位于带有域控制器的某个网络上? (这意味着/表明您的域控制器服务器将允许(或不允许)此处的权限。
但是,为了节省在这里写 100 页的建议和说明吗?
我建议您在 Web 服务器上创建一个新用户(从该服务器,而不是域用户/名称。因此,使用登录名 + 密码创建一个用户。
然后在 84 服务器上,还创建相同的用户名和相同的密码。
现在测试“84”服务器上的新登录,并确保它有效,并确保它/您可以使用该用户在正确的文件夹中创建文件夹。好的,注销,现在返回服务器 82,并如上所述使用此登录应用程序池。
因此像这样:
以上将/应该简单地工作。
完全不清楚网络服务器是否位于您公司的域/网络控制器上(这不是一个好主意),但不管是不是?使用上述方法并不重要,因为在两台计算机上的每台计算机上创建一个非域用户,然后使用来自 Web 服务器应用程序池的登录应该并且将会简单地工作。
如前所述,如果此处使用域控制器,我们可以更深入地了解细节,但我发现上述方法确实有效,并且无论使用域控制器 (AD) 都有效。