Juurdepääs teiste serverite ühiskaustadele ASP.NET Core'i rakenduse kaudu (võrguühendusega programmi versioon)
Toimingu kontrollimise keskkond
- Visuaalne stuudio
-
- Visual Studio 2022
- ASP.NET Tuum
-
- 8 (habemenuga lehed, MVC)
- Windows Server
-
- 2022 (ASP.NET põhisüsteemi nõuded)
- 2019 (ühiskausta juurutusserver)
- IIS
-
- 10.0
Töökeskkond
Me pole seda kõigil juhtudel testinud, kuid see peaks üldiselt töötama järgmistel tingimustel:
- Visuaalne stuudio
-
- Kõik, mis võib arendada ASP.NET põhiprojekti
- ASP.NET Tuum
-
- Kõik versioonid (MVC, Razor Pages, API)
- Windows Server
-
- Windows Server 2008 või uuem
- IIS
-
- 7.0 või uuem
eeltingimus
- ASP.NET Põhirakendused on mõeldud töötama IIS-is.
- Kuna see kasutab autentimiseks Windowsi API-sid, ei tööta see mitte-Windowsis.
keskkond
Seda kontrollitakse järgmises keskkonnas.
Arvutite ja serverite | kasutamise eesmärk |
---|---|
Windows 11 (kohalik) | Keskkond programmide arendamiseks. |
SV2022Test | Keskkond, mis käitab IIS-i ja ASP.NET Core'i. Juurdepääs jagatud kaustale SV2019Test siit |
SV2019Test | Jagatud kaustadega serverid |
Lisaks on erinevad seaded järgmised.
Parameetri nimi | Väärtus |
---|---|
Juurdepääsu kasutajanimi | Jagatudkasutaja |
Ühiskausta nimi | Jagatud kaust |
Ühiskaustaserveri loomine
Kasutaja loomine
Looge kasutaja, kes pääseb juurde ühisele kaustale. Sel juhul loome kohaliku konto, kuid kui teil on tegemist serverite ja kontodega sellises domeenis nagu Active Directory, saate ka seda kasutada.
Kasutaja loomise protsess jääb nende näpunäidete ulatusest välja, nii et me ei lasku liiga palju üksikasjadesse.
SharedUser
Sel juhul loome selle nimega .
Kuna see kasutaja ei kasuta ekraani ega muuda seadeid, ei saa parooli muuta.
Kui jätate vaikimisi, saate selle kasutajaga sisse logida kaugtöölaua jms abil, nii et palun eemaldage grupist Users
.
Ühiskausta loomine
Pole tähtis, kus te selle loote. Seda seetõttu, et teised serverid ei hooli füüsilise kausta asukohast.
Sel juhul loome kausta, mille nimi on otse C-draivi all SharedFolder
, ja jagame seda.
Avage atribuudid ja konfigureerige jagamissätted.
Ühiskausta nimi peaks SharedFolder
olema . See nimi on nähtav teistele serveritele.
Lisage SharedUser
õigused.
Everyone
Kustutage olemasolev .
Kinnitage loaga "Muuda".
Kuna oleme lisanud ainult õigused, millele pääseb juurde väljastpoolt, seame selle sisemiselt SharedUser
nii, et see saaks selles kaustas töötada.
Kinnitage loaga "Muuda".
Toimingu kontrollimiseks looge fail. Selles programmis töödeldakse kodeeringut UFT-8-s, nii et palun salvestage see UTF-8-sse.
See on OK, kui pääsete Exploreris juurde teisest arvutist \\<サーバー名>\
, logiteSharedUser
sisse ja vaatate faili.
Programmi loomine failide lugemiseks ja kirjutamiseks ASP.NET Core'i rakenduse ühiskaustast
Mr./Ms. toiming on nupule klõpsamine.
- Laadige failid ühiskausta ja kuvage need ekraanil
- Uue faili kirjutamine ühiskausta
protsess.
Razor Pages ja MVC kood on selle näited, kuid programm, mis pääseb juurde jagatud kaustale, on mõlema jaoks sama. Sama kehtib ka veebi API-de kohta. Kui midagi, peaks see töötama ka kliendiprogrammis.
Protsess, mis loob võrguga ühenduse konkreetse protsessi kestel;
Looge järgmine kood oma projekti mis tahes kohas. Klassi nimi on SharedFolderAccessor
, kuid nimi on meelevaldne.
SharedFolderAccessor
Ühiskaustale pääsete juurde seni, kuni loote Dispose
.
using
võimaldab teil määrata ajavahemiku, mille jooksul juurdepääsule pääseb juurde selgesõnalises ulatuses.
using System.ComponentModel;
using System.Net;
using System.Runtime.InteropServices;
<summary>
共有フォルダにユーザー名とパスワードでアクセスするためのクラスです。
using を使用すればそのスコープの間、共有フォルダにアクセスできます。
</summary>
public class SharedFolderAccessor : IDisposable
{
private readonly string _networkName;
<summary>
コンストラクタです。
</summary>
<param name="networkName">共有フォルダのあるサーバーを「\\<サーバー名>」形式で指定します。</param>
<param name="credentials">共有フォルダにアクセスするための資格情報です。</param>
<exception cref="Win32Exception"></exception>
public SharedFolderAccessor(string networkName, NetworkCredential credentials)
{
_networkName = networkName;
// 接続するネットワークの情報を設定
var netResource = new NetResource
{
Scope = ResourceScope.GlobalNetwork,
ResourceType = ResourceType.Disk,
DisplayType = ResourceDisplaytype.Share,
RemoteName = networkName,
};
// ドメインがある場合はドメイン名も指定、ない場合はユーザー名のみ
var userName = string.IsNullOrEmpty(credentials.Domain)
? credentials.UserName
: $@"{credentials.Domain}\{credentials.UserName}";
// 共有フォルダにユーザー名とパスワードで接続
var result = WNetAddConnection2(netResource, credentials.Password, userName, 0);
if (result != 0)
{
throw new Win32Exception(result, $"共有フォルダに接続できませんでした。(エラーコード:{result})");
}
// 正常に接続できれば WNetCancelConnection2 を呼び出すまではプログラムで共有フォルダにアクセス可能
}
~SharedFolderAccessor()
{
// Dispose を呼び忘れたときの保険
WNetCancelConnection2(_networkName, 0, true);
}
public void Dispose()
{
WNetCancelConnection2(_networkName, 0, true);
GC.SuppressFinalize(this); // Dispose を明示的に呼んだ場合はデストラクタの処理は不要
}
<summary>
ネットワーク リソースへの接続を確立し、ローカル デバイスをネットワーク リソースにリダイレクトできます。
</summary>
<param name="netResource">ネットワーク リソース、ローカル デバイス、ネットワーク リソース プロバイダーに関する情報など。</param>
<param name="password">ネットワーク接続の作成に使用するパスワード。</param>
<param name="username">接続を確立するためのユーザー名。</param>
<param name="flags">接続オプションのセット。</param>
<returns></returns>
[DllImport("mpr.dll")]
private static extern int WNetAddConnection2(NetResource netResource, string password, string username, int flags);
<summary>
既存のネットワーク接続を取り消します。
</summary>
<param name="name">リダイレクトされたローカル デバイスまたは切断するリモート ネットワーク リソースの名前。</param>
<param name="flags">接続の種類。</param>
<param name="force">接続に開いているファイルまたはジョブがある場合に切断を行う必要があるかどうか。</param>
<returns></returns>
[DllImport("mpr.dll")]
private static extern int WNetCancelConnection2(string name, int flags, bool force);
<summary>
NETRESOURCE 構造体を定義しています。
</summary>
[StructLayout(LayoutKind.Sequential)]
private class NetResource
{
public ResourceScope Scope;
public ResourceType ResourceType;
public ResourceDisplaytype DisplayType;
public int Usage;
public string LocalName = "";
public string RemoteName = "";
public string Comment = "";
public string Provider = "";
}
<summary>
ネットワークリソースのスコープ。
</summary>
private enum ResourceScope : int
{
<summary>ネットワークリソースへの現在の接続。</summary>
Connected = 1,
<summary>すべてのネットワークリソース。</summary>
GlobalNetwork = 2,
Remembered = 3,
Recent = 4,
<summary>ユーザーの現在および既定のネットワークコンテキストに関連付けられているネットワークリソース。</summary>
Context = 5,
};
<summary>
リソースの種類。
</summary>
private enum ResourceType : int
{
<summary>印刷リソースとディスクリソースの両方のコンテナー、または印刷またはディスク以外のリソースなど。</summary>
Any = 0,
<summary>共有ディスクボリューム。</summary>
Disk = 1,
<summary>共有プリンター。</summary>
Print = 2,
Reserved = 8,
}
<summary>
ユーザーインターフェイスで使用する必要がある表示の種類。
</summary>
private enum ResourceDisplaytype : int
{
<summary>リソースの種類を指定しないネットワークプロバイダーによって使用されます。</summary>
Generic = 0x0,
<summary>サーバーのコレクション。</summary>
Domain = 0x01,
<summary>サーバー。</summary>
Server = 0x02,
<summary>共有ポイント。</summary>
Share = 0x03,
File = 0x04,
Group = 0x05,
<summary>ネットワークプロバイダー。</summary>
Network = 0x06,
Root = 0x07,
Shareadmin = 0x08,
<summary>ディレクトリ。</summary>
Directory = 0x09,
Tree = 0x0a,
Ndscontainer = 0x0b,
}
}
Kuna see kasutab Win32 API-sid ja WNetAddConnection2
WNetCancelConnection2
, töötab see ainult Windowsi keskkonnas.
Mul on praegu kommentaar, kuid kui soovite rohkem teada saada, otsige see Internetist üles.
Lisaks jagatud kaustadele saate teha ka toiminguid võrguressurssidele juurdepääsuks.
Seda on lihtne kasutada ja kui kirjutate järgmist, pääsete using
laiendatud kaustale juurde ka ulatuse ajal.
using (new SharedFolderAccessor($@"\\{serverName}", credentials))
{
// この間は共有フォルダにアクセスできる
}
Kuid tegelikult WNetCancelConnection2
, ühendust ei katkestata kohe helistamise ajal , nii et using
pääsete jagatud kaustale juurde ka pärast ulatust.
Testige koodi SharedFolderAccessori abil
Kuna jagatud kaustale juurdepääsu protsess ei sõltu raamistikust, loome testimiseks ühise meetodi, mis loeb ja kirjutab faile. Pazor Pages ja MVC tuleks nimetada samaks.
Sisu on protsess, mis kirjutab argumendile edastatud teksti ühiskausta, loeb ühiskaustas juba olevat tekstifaili ja tagastab teksti.
using System.Net;
public static class Util
{
public static string ReadAndWrite(string text)
{
var serverName = "ServerName";
var folderName = "SharedFolder";
var inputFileName = "Input.txt";
var outputFileName = "Output.txt";
var username = "SharedUser";
var password = "password";
var credentials = new NetworkCredential(username, password);
using (new SharedFolderAccessor($@"\\{serverName}", credentials))
{
// ファイルの書き出し
System.IO.File.WriteAllText(Path.Combine($@"\\{serverName}\{folderName}", outputFileName), text);
// ファイルの読み込み
return System.IO.File.ReadAllText(Path.Combine($@"\\{serverName}\{folderName}", inputFileName));
}
}
}
Habemenuga lehed
Razor Pages'is asetame nupu Index.cshtml, klõpsake seda, käivitage testkood ja kuvage tulemused ekraanil. Mõnel juhul ei pruugi jagatud kaust olla juurdepääsetav, nii et see on ümbritsetud proovipüügiga.
Index.cshtml.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace SharedFolderAccessRazorPages.Pages
{
public class IndexModel : PageModel
{
private readonly ILogger<IndexModel> _logger;
public string Message { get; set; } = "";
public IndexModel(ILogger<IndexModel> logger)
{
_logger = logger;
}
public void OnPost()
{
try
{
Message = Util.ReadAndWrite($"プログラムからの書き込み ({DateTime.Now})");
}
catch (Exception ex)
{
Message = ex.ToString();
}
}
}
}
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://learn.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>
@* ここから追加 *@
<form method="post">
<button type="submit">サブミット</button>
</form>
<div>
@Model.Message
</div>
@* ここまで追加 *@
MVC
Samamoodi paigutatakse MVC Index.cshtml
puhul nupp sisse ja klõpsamisel helistab see jagatud kausta testkoodile.
Kontrollerid/HomeController.cs
// 省略
namespace SharedFolderAccessMvc.Controllers
{
public class HomeController : Controller
{
// 省略
public IActionResult Index()
{
return View();
}
// ここから追加
[HttpPost]
public IActionResult Index(string dummy)
{
try
{
ViewData["Message"] = Util.ReadAndWrite($"プログラムからの書き込み ({DateTime.Now})");
}
catch (Exception ex)
{
ViewData["Message"] = ex.ToString();
}
return View();
}
// ここまで追加
public IActionResult Privacy()
{
return View();
}
// 省略
}
}
Index.cshtml
@{
ViewData["Title"] = "Home Page";
}
<div class="text-center">
<h1 class="display-4">Welcome</h1>
<p>Learn about <a href="https://learn.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>
@* ここまで追加 *@
Toimingu kinnitamine
Siluge ja kontrollige, kas pääsete jagatud kaustale edukalt juurde.
Rakendusserveri loomine
Kuna oleme kinnitanud, et jagatud kaustale pääseb juurde programmi käivitamisega, pole järgmine samm vajalik. Kui soovite IIS-serveris toimingut kontrollida, saate seda teha, järgides alltoodud samme.
Siit on see täiendus, nii et ma ei selgita seda liiga üksikasjalikult, vaid selgitan peamiselt pilti.
IIS-i installimine
Installige see serverihaldurist vaikimisi. Ma ei lasku protseduuri üksikasjadesse.
Lisafunktsioone pole vaja.
Praegu pole täiendavaid IIS-teenuseid vaja.
ASP.NET Core Runtime Hosting Bundle'i installimine
Kuna kasutame ASP.NET Core 8, peame vastavalt installima käitusaja vastavalt. Laadige see alla järgmiselt URL-ilt:
Selleks, et käivitada ASP.NET Core IIS-is, vajate midagi, mida nimetatakse "Hosting Bundle". Laadige alla "Hosting Bundle" ASP.NET Core Runtime'ist.
Pärast allalaadimist käivitage see serveris.
Selle installimiseks järgige viisardit.
Programmi avaldamine
Väljastage programm, mille soovite IIS-i juurutada, failina Visual Studiost.
Muutke seda Windowsi jaoks.
Avaldage, kui olete lõpetanud.
Kui klõpsate sihtasukohal, saate avada kausta, kus avaldatud fail asub.
Te ei pea neid kõiki tooma, kuid kui te pole kindel, võite need kõik praegu võtta. Sel hetkel pole vaja teha muud, kui veenduda, et fail on olemas.
Veebirakenduste loomine ja juurutamine
Avage Windowsi haldustööriistade kaudu Internet Information Services (IIS) Manager.
Loome saidi, kuid seekord kasutame "Vaikimisi veebisaiti", mis on seal algusest peale.
Kui valitud on vaikeveebisait, klõpsake kausta avamiseks nuppu Explorer. Kopeerige avaldatud programm siia. Saate algse faili kustutada.
Avage leht IIS-i lingilt ja vaadake, kas ekraan ilmub. Kõigepealt saate avada veebibrauseri ja sisestada URL-i otse.
Toimingu kinnitamine
Klõpsake nuppu, et kontrollida, kas see töötab ilma probleemideta. Ülaltoodus pääseb sellele juurde veebiserverist, kuid kuna see on veebiserver, peaks seda olema võimalik kasutada teistest arvutitest.