从 ASP.NET Core 应用程序访问其他服务器上的共享文件夹(IIS、应用程序池设置)

更新页 :
页面创建日期 :

操作验证环境

Visual 工作室
  • Visual Studio 2022
ASP.NET 核心
  • 6 (Razpr 页数)
Windows 服务器
  • 2022 (ASP.NET 核心系统要求)
  • 2019(共享文件夹部署服务器)
IIS的
  • 10.0

操作环境

我还没有在所有方面都测试过它,但它应该在大多数情况下都有效。

Visual 工作室
  • 任何可以开发 ASP.NET 或 ASP.NET 核心项目的东西
ASP.NET 核心
  • 任何版本(MVC、Razor Pages、API)
ASP.NET
  • 任何版本都是可以接受的
Windows 服务器
  • Windows Server 2008 或更高版本
IIS的
  • 7.0 或更高版本

前提

  • ASP.NET Core 应用程序旨在在 IIS 上运行。 其他 Web 服务器将无法实现这些提示的内容

环境

在以下环境中验证。

PC和服务器 的使用目的
Windows 11(本地) 开发程序的环境。 与本文的目的无关
SV2022测试 运行 IIS 和 ASP.NET Core 的环境。 从此处访问 SV2019Test 共享文件夹
SV2019测试 具有共享文件夹的服务器

此外,各种设置如下。

参数名称
访问用户名 共享用户
共享文件夹名称 SharedFolder

创建一个程序以从 ASP.NET Core 应用程序从共享文件夹读取和写入文件

作为先生/女士拉动,只需单击按钮,

  • 将文件加载到共享文件夹中并在屏幕上显示它们
  • 将新文件写入共享文件夹

过程。

我还没有创建共享文件夹,所以我无法调试它,但它是简单的代码,所以我暂时只做一个程序。

ASP.NET Core 项目可以是任何类型,但在本例中,我使用的是 Razor Pages。

Index.cshtml.cs 并添加单击按钮时发生的情况。 服务器名称是直接写的,但请在实际操作中调整好。 在某些情况下,共享文件夹可能无法访问,因此将其包含在 try-catch 中。

public class IndexModel : PageModel
{
  // 省略

  public void OnGet() { }

  // ここから追加
  public void OnPost()
  {
    var serverName = "SV2019Test";
    try
    {
      var readFilePath = $@"\\{serverName}\SharedFolder\Input.txt";
      var writeFilePath = $@"\\{serverName}\SharedFolder\Output.txt";

      // 共有フォルダからファイルを読み込む
      var text = System.IO.File.ReadAllText(readFilePath);

      // 別ファイルとして共有フォルダに書き込む
      System.IO.File.WriteAllText(writeFilePath, text);

      // 読み込んだ内容を画面に表示する
      ViewData["Message"] = text;
    }
    catch (Exception ex)
    {
      ViewData["Message"] = ex;
    }
  }
  // ここまで追加
}

Index.cshtml 有一个按钮和一条消息。

@page
@model IndexModel
@{
    ViewData["Title"] = "Home page";
}

<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>

@* ここから追加 *@
<form method="post">
  <button type="submit">処理実行</button>
</form>
<div>@ViewData["Message"]</div>
@* ここまで追加 *@

创建程序后,创建一个文件以部署到服务器。 在这种情况下,我们将使用直接放置已发布文件的方法,但使用哪种方法并不重要。 此外,程序的安排不是这个提示的精髓,所以它以简化的方式列出。

添加发布配置。

更改设置。

设置如图所示。 这也与这次的目的没有特别的关系,所以请根据你的环境进行设置。

发布程序。

发布程序后,单击“目标位置”链接,将打开包含要放置的文件的文件夹。

构建共享文件夹服务器

创建用户

通常,如果服务器不同,则在每台服务器上创建的用户在内部被视为完全不同的用户。 通过创建具有相同用户名和密码的文件,可以跳过到另一台服务器的 Windows 身份验证。 这次我们将使用它来访问另一台服务器上的共享文件夹。

顺便说一句,如果您要处理域(如 Active Directory)中的服务器和帐户,则可以使用该帐户设置两个服务器,这在一定程度上简化了配置。

没有详细描述创建用户的过程。

SharedUser在本例中,我们将使用名称 创建它。 由于此用户不操作屏幕或更改设置,因此无法更改密码。

如果保留默认值,则可以使用远程桌面等使用此用户登录,因此请从组 Users 中删除。

创建共享文件夹

在哪里创建它并不重要。 这是因为其他服务器不关心物理文件夹的位置。 在这种情况下,我们将创建一个直接在 C 盘下 SharedFolder 命名的文件夹并共享它。

打开属性并配置共享设置。

共享文件夹的名称应 SharedFolder 为 。 此名称将对其他服务器可见。 添加 SharedUser 权限。

Everyone删除现有的 .

使用“更改”权限进行确认。

由于我们只添加了可以从外部访问的权限,因此我们将在内部 SharedUser 设置它,以便可以在此文件夹中运行。

使用“更改”权限进行确认。

创建一个文件来检查操作。

如果可以从另一台 PC 访问资源管理器 \\<サーバー名>\SharedUser 使用 登录并查看文件,则可以。

构建应用程序服务器

安装 IIS

目前,默认情况下从服务器管理器安装它。 我不会详细介绍该过程。

不需要其他功能。

目前不需要其他 IIS 服务。

ASP.NET Core Runtime Hosting Bundle 安装

由于我们使用的是 Core 6 ASP.NET 因此我们需要相应地安装运行时。 从以下 URL 下载:

为了在IIS中运行 ASP.NET Core,您需要称为“Hosting Bundle”的东西。 从 ASP.NET Core 运行时下载“Hosting Bundle”。

下载后,在服务器上运行它。

按照向导进行安装。

创建和部署 Web 应用程序

在 Windows 管理工具中,打开 Internet Information Services (IIS) 管理器。

您可以按原样使用“默认网站”,但这次我们将创建一个新网站。 默认网站会自动启动,因此请停止它。

创建一个新网站。

这一次,站点名称是 SharedFolderAccess ,但没关系。

应用程序池是为新站点自动生成的。

创建并指定要放置程序的所选文件夹。

端口 80 标记为“默认网站”,您将看到一条警告,但如果它已经关闭,您可以忽略它。

它已被创建。

在 Windows 资源管理器中打开网站中指定的文件夹,并按原样复制和放置所有已发布的程序。

从 IIS 链接打开页面,查看屏幕是否显示。 您可以先打开 Web 浏览器并直接输入 URL。

顺便说一句,即使您在此状态下单击按钮,也会收到错误,因为权限设置尚未完成。

创建用户

在应用程序服务器上创建与在共享文件夹服务器上相同的用户 SharedUser 。 确保您的密码也匹配。 步骤完全相同。

更改应用程序池权限

Web 程序的访问由应用程序池决定。 默认情况下,它仅 ApplicationPoolIdentity 具有运行 Web 应用程序的权限。

通过将此权限更改为 SharedUser ,Web 程序可以使用您设置的用户的权限运行。 这允许 Web 程序 SharedUser 访问 中的共享文件夹。

打开 IIS 管理器时,选择“应用程序池”。

创建网站时会自动添加 SharedFolderAccess 一个,因此请右键单击它并选择“高级”。

流程模型中有一个“ID”,因此单击右侧的按钮。

选择“自定义帐户”,然后单击“设置”按钮。

SharedUser 输入并确认您的用户名和密码。

操作确认

转到网页并单击按钮。 如果显示文本文件的内容,则表示成功。

请确保共享文件夹中还有一个新文件。