從 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 輸入並確認您的使用者名和密碼。

操作確認

轉到網頁並按下按鈕。 如果顯示文字文件的內容,則表示成功。

請確保共用資料夾中還有一個新檔。