Permissions 在负载平衡服务器上上载文件

Permissions 在负载平衡服务器上上载文件,permissions,file-upload,load-balancing,Permissions,File Upload,Load Balancing,我开发了一个web项目,其中一个主要功能是上传文件 所有权限都基于Windows身份验证。当我第一次创建该项目时,我没有意识到它将位于负载平衡的服务器上。现在它处于负载平衡服务器的环境中,文件上传已成为一个主要问题 我原本以为我可以创建一个虚拟目录到一个网络共享,这个共享就是上传文件夹,但是这个解决方案变成了一场噩梦。我还没有能够在生产环境中成功地进行任何测试运行 所以我现在想,我的解决方案是在服务器上创建一个服务,检查上传目录并同步它们。我看到的另一种可能的解决方案是将文件存储在我过去遇到过一

我开发了一个web项目,其中一个主要功能是上传文件

所有权限都基于Windows身份验证。当我第一次创建该项目时,我没有意识到它将位于负载平衡的服务器上。现在它处于负载平衡服务器的环境中,文件上传已成为一个主要问题

我原本以为我可以创建一个虚拟目录到一个网络共享,这个共享就是上传文件夹,但是这个解决方案变成了一场噩梦。我还没有能够在生产环境中成功地进行任何测试运行

所以我现在想,我的解决方案是在服务器上创建一个服务,检查上传目录并同步它们。我看到的另一种可能的解决方案是将文件存储在我过去遇到过一些问题的数据库中

是否有人知道一种直接的解决方案,可以将文件上载到使用Windows权限进行身份验证的负载平衡服务器

谢谢

更新-因此我已将应用程序池更改为通过一个域帐户运行,该帐户在Windows权限中对共享和文件夹本身拥有完全权限。虚拟目录在IIS中具有完全权限,但我仍然遇到同样的问题

其中一件需要做的事情就是创建目录的能力,我想现在这可能会让我大吃一惊。我只是在使用System.IO.Directory.CreateDirectory


关于我可能丢失权限的地方还有其他想法吗?

如果您真的想避免存储在数据库中,我认为您的下一个最佳选择是您已经提到的虚拟目录解决方案,尽管我可以看出权限问题如何很容易失控,这取决于您的设置

在我们的生产环境中,我们所有不同的站点都有自己的应用程序池。应用程序池本身都有自己的域帐户,这使得管理文件系统和SQL server中的权限更加容易。每个帐户都是IIS WP域组的成员。在群集中的每个服务器上,域IIS WP是本地内置IIS_WPG组的成员。群集中每个服务器上的IIS配置都相同。这样做的重要作用是确保给定的web应用程序始终以相同的身份运行,而不管集群中的哪个服务器被击中

使用我描述的设置,实现虚拟目录解决方案将非常简单,尽管您仍然需要担心其他明显的问题,如命名冲突等。如果您仍然使用默认的应用程序池标识设置,我认为实现我所描述的将有助于在处理集群配置时使您的生活更轻松

优势

其中一个 在上存储文件的主要好处 磁盘是很容易做到的。 只需在文件上传时调用SaveAs 控制,你就差不多完成了

另一个优点是,在 磁盘易于备份;你就抄吧 将文件复制到另一个位置。这 还可以更轻松地执行增量操作 备份;已删除的文件 备份的文件不需要复制 再说一遍

缺点

储存 文件系统中的文件具有 也没有什么缺点。可能 最有问题的问题是 磁盘上文件的松散耦合特性 磁盘。他们没有密切的关系 数据库中有一条记录。所以 例如,当您从中删除产品时 在数据库中,您可能会得到一个 孤立的产品形象。没有 之间进行内部联接的直接方法 产品表和您的图像 文件夹以确定孤立的对象 你留下的文件。这意味着 页面开发人员负责 正在编写删除文件的代码 每当关联的 数据库记录被删除

另外,要在磁盘上存储上载的文件, 您的web服务器需要访问的权限 写入文件系统。这很容易 当你经营自己的公司时,你会过来 服务器,但可能会被证明是更多 ISP场景中存在问题


您的解决方案应该可以正常工作:

  • 创建网络帐户
  • 让每个服务器上的应用程序池在此帐户下运行
  • 在特定服务器上创建文件夹,并授予此网络帐户对其的权限
  • 将文件夹设置为“共享”,并授予帐户对共享的权限
  • 将所有服务器设置为使用此目录存储上载的文件
  • 仅供参考

    此问题的解决方案是使用具有共享访问权限、文件夹权限和虚拟目录权限的用户帐户进行临时模拟

    当我最初尝试这种方法时,我的模拟代码中出现了一些错误,然后在修复错误后,输入了一个错误的密码,所以我放弃了这种方法。我终于尝试了所有其他的方法,然后又回到了这个问题上——看起来它起作用了

    因此,答案是在将网络共享作为虚拟目录处理时进行模拟

    以下是实现这一切的代码链接:


    如果你说它有“完全权限”,我不确定会出什么问题-只要确保它有权限,事实上它有对目录的“修改”和“写入”权限。如果您使用组来分配NTFS权限,请尝试直接使用该帐户。此外,如果您更改工作进程帐户的组成员身份,则必须重新启动IIS(不仅仅是网站或应用程序池)才能对其进行重新身份验证,就像用户必须注销和登录一样。您可以尝试使用AWS S3存储文件。我正在负载平衡服务器上运行一个项目,并将任何用户上传的文件放在S3存储桶中。如果您的网站托管在AWS服务器上,则存储/检索操作将非常快。为什么要使用模拟?那意味着你