質問

ユーザーがファイルをアップロードできる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....
}

注意すべき点がいくつかあります:

  • パスの番号「1DirectoryEntryコンストラクタは サイトのIIS番号。

  • パス内 IIS://Localhost/w3svc/1/root/storage1/test、 最初の部分 IIS://Localhost/w3svc/1/rootは ウェブサイトの「ルート」アプリケーション。 この部分は常に必要です。

  • への参照を追加する必要があります System.DirectoryServices プロジェクトへのアセンブリ。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top