IIS外部のサーバーパスのマッピング
-
19-08-2019 - |
質問
ユーザーがファイルをアップロードできるWebアプリがあります。ファイルは、外部ストレージデバイスにマップされる仮想フォルダーにIISによって物理的に保存されます。 アップロードされた各ファイルに関するレコードはデータベースに保存されます。データベースレコードには、ファイルがまだ<!> quot; active <!> quotであるかどうかに関する情報が含まれています。 (ユーザーによって削除されていない)、および仮想フォルダーパス(例:/ storage1 / test)
今、定期的に、IISの外部で管理タスクを実行して、もはや<!> quot; active <!> quotではないすべてのファイルのリストを取得したいと思います。物理ストレージからこれらを削除します。 管理タスクを、スケジュールされたタスクまたはWindowsサービスとしてIISの外部で実行したいと思います。 ただし、データベースレコードに格納されている仮想フォルダーパスを外部プロセスで物理パスにマップする方法はわかりません。 <!> quot; tap <!> quot;する方法はありますか?外部プロセスまたはこれを行うための他のスマートな方法からIISに? (または、間違った方向に進んでいますか。)
TIA / Henrik
解決
プロジェクトにSystem.Webへの参照を追加する必要があります。
string path = System.Web.HttpServerUtility.MapPath("/MyWebSite");
他のヒント
アプリがASP.NETアプリの場合、Server.MapPath呼び出しを調査できます-メインアプリと同じ仮想ディレクトリを使用している場合。
それ以外の場合は、<!> quot; base path <!> quot;を保存することをお勧めします。 (これは、仮想アプリのパスに対応します)外部アプリの設定で、そのベースパスとファイルパスを完全なパスに連結するだけです。
マーク
プログラムでこのパスを取得する必要がある場合は、次のようなことができます:
using(DirectoryEntry de =
new DirectoryEntry("IIS://Localhost/w3svc/1/root/storage1/test"))
{
string pathToFiles = de.Properties["Path"].Value;
// Do my file tidy up tasks....
}
注意すべき点がいくつかあります:
-
パスの番号「
1
」DirectoryEntry
コンストラクタは サイトのIIS番号。 -
パス内
IIS://Localhost/w3svc/1/root/storage1/test
、 最初の部分IIS://Localhost/w3svc/1/root
は ウェブサイトの「ルート」アプリケーション。 この部分は常に必要です。 -
への参照を追加する必要があります
System.DirectoryServices
プロジェクトへのアセンブリ。