4

主な機能の 1 つがファイルのアップロードである、開発した Web プロジェクトがあります。

すべてのアクセス許可は、Windows 認証に基づいています。プロジェクトを最初に作成したとき、それが負荷分散されたサーバー上にあることに気づきませんでした。現在は負荷分散されたサーバーの環境にあり、ファイルのアップロードが大きな問題になっています。

私は当初、アップロード フォルダーとなるネットワーク共有への仮想ディレクトリを作成するだけでよいと考えていましたが、その解決策はアクセス許可の悪夢に変わりました。実稼働環境でのテストを成功させることができませんでした。

だから私は今考えています.私の解決策は、アップロードディレクトリをチェックしてそれらを同期するサービスをサーバー上に作成することです. 私が見る他の可能な解決策は、過去にいくつかの問題があったデータベースにファイルを保存することです。

Windows アクセス許可を使用して認証する負荷分散サーバーにファイルをアップロードするための簡単なソリューションを知っている人はいますか?

ありがとう。

更新 - そのため、Windows アクセス許可で共有とフォルダー自体に対する完全なアクセス許可を持つドメイン アカウントを介して実行するようにアプリケーション プールを変更しました。仮想ディレクトリは IIS で完全な権限を持っていますが、まだ同じ問題が発生しています。

これで行う必要があることの 1 つは、ディレクトリを作成する機能でもあります。System.IO.Directory.CreateDirectory を使用しています

アクセス許可が不足している可能性がある場所について、他に何か考えはありますか?

4

3 に答える 3

6

データベースへの保存を本当に避けたい場合は、次の最善の策は、既に話した仮想ディレクトリ ソリューションになると思いますが、セットアップによっては、アクセス許可の問題が非常に簡単に手に負えなくなることがわかります.

私たちの実稼働環境では、すべての個別のサイトに独自のアプリ プールがあります。アプリ プール自体にはそれぞれ独自のドメイン アカウントがあるため、ファイル システムと SQL サーバーでのアクセス許可の管理がはるかに簡単になります。これらの各アカウントは、IIS WP ドメイン グループのメンバーです。クラスター内の各サーバーで、ドメイン IIS WP はローカルの組み込み IIS_WPG グループのメンバーです。IIS 構成は、クラスター内の各サーバーで同一です。これの重要な効果は、クラスター内のどのサーバーがヒットしたかに関係なく、特定の Web アプリケーションが常に同じ ID として実行されるようにすることです。

ここで説明したセットアップでは、仮想ディレクトリ ソリューションを実装するのは非常に簡単ですが、名前の競合などの他の明らかな問題についてはまだ心配する必要があります。既定のアプリ プール ID セットアップをまだ使用している場合は、ここで説明したことを実装すると、クラスター構成を処理する際の一般的な作業が楽になると思います。

この記事では、ファイル システムに保存することの利点と欠点をいくつか挙げています。

利点

ファイルをディスクに保存する主な利点の 1 つは、非常に簡単に行えることです。FileUpload コントロールで SaveAs を呼び出すだけで、ほとんど完了です。

もう 1 つの利点は、ディスク上のファイルを簡単にバックアップできることです。ファイルを別の場所にコピーするだけです。これにより、増分バックアップも簡単になります。すでにバックアップされているファイルを再度コピーする必要はありません。

短所

ファイル システムにファイルを保存することには、いくつかの欠点もあります。おそらく最も問題となる問題は、ディスク上のファイルが疎結合であることです。データベース内のレコードと強い関係はありません。そのため、たとえばデータベースから製品を削除すると、孤立した製品イメージになる可能性があります。product テーブルと images フォルダーの間で INNER JOIN を実行して、残っている孤立したファイルを特定する直接的な方法はありません。これは、関連するデータベース レコードが削除されるたびに、ページ開発者がディスクからファイルを削除するコードを作成する責任があることを意味します。

また、アップロードされたファイルをディスクに保存するには、Web サーバーにファイル システムへの書き込み権限が必要です。これは、独自のサーバーを実行している場合は簡単に実現できますが、ISP のシナリオではより問題になる可能性があります。

于 2008-12-29T18:54:19.307 に答える
0

ご参考までに、

この問題の解決策は、共有へのアクセス、フォルダーに対するアクセス許可、および仮想ディレクトリに対するアクセス許可を持つユーザー アカウントで一時的な偽装を行うことでした。

最初にこれを試したとき、偽装コードにいくつかの間違いがあり、それを修正したときに間違ったパスワードが入力されたため、このアプローチを放棄しました。私は最終的に他のすべてを試してみましたが、これに戻ってきました-うまくいっているようです.

したがって、その答えは、ネットワーク共有を仮想ディレクトリとして扱う場合のなりすましです。

すべてを実現したコードへのリンクは次のとおりです。

http://support.microsoft.com/kb/306158#4

于 2008-12-30T21:07:19.443 に答える
0

あなたのソリューションはうまくいくはずです:

  1. ネットワーク アカウントを作成する
  2. 各サーバーのアプリケーションのアプリケーション プールをこのアカウントで実行する
  3. 特定のサーバー上にフォルダを作成し、このネットワーク アカウントにそのフォルダに対する権限を与える
  4. フォルダを「共有」として設定し、共有に対するアカウント権限も付与します
  5. このディレクトリを使用してアップロードされたファイルを保存するようにすべてのサーバーを設定します
于 2008-12-29T19:06:33.900 に答える