5

私の ASP.NET Web アプリケーションのユーザーが、テキスト情報と画像で構成される証言を送信するシナリオがあります。送信プロセスには、次の手順があります。

  • まず、ユーザーがコンテンツを入力し、画像へのパスを選択します
  • プレビューをクリックすると、確認できるように情報がもう一度表示されます。
  • 情報がデータベースに保持されていることが確認されると、

これに関する問題は、ユーザーが実際に確認する前に、アップロードされた画像を DB に保存したくないことです。代わりに、それらを一時ファイルとして保存し、最終確認後にのみ DB に配置します。

また、アプリケーションを中程度の信頼で実行したいので、アプリケーション ディレクトリへの書き込み権限のみを持ち、それ以外には書き込み権限を与えません。ASPNET / NETWORK SERVICE ユーザーの書き込み権限を ~/App_Data フォルダーに制限したいとさえ思っています。私のシナリオの問題は、一時ファイルがこのフォルダーに作成されると、アプリケーション プールがリサイクルされ、すべての証言送信でそれを望まないことです。

代わりにこれらの一時ファイルを保持するようにどのようにアドバイスしますか? ファイルを更新しても、プールは再起動されません。作成または名前変更の場合のみです。しかし、すべてのユーザーのために画像全体を単一のファイルに保存できるとは思いません。どう思いますか?

更新:アップロードにサードパーティのコントロールを使用していることに注意してください。アップロード後にファイルコンテンツのバイナリストリームにプログラムでアクセスできますが、2回目のポストバック後にこれを保持することはできません(最初のステップとポストバックが実際にアップロードを行います)。

4

4 に答える 4

5

私はIsolatedStorageをお勧めします。一種の仮想フォルダです。

CodeProject の例からの抜粋を次に示します。

IsolatedStorageFileStream stream = 
  new IsolatedStorageFileStream(ISOLATED_FILE_NAME, 
  FileMode.Create, isoStore);

StreamWriter writer = new StreamWriter( stream );
writer.WriteLine( "This is my first line in the isolated storage file." );
writer.WriteLine( "This is second line." );
writer.Close();

更新:ファイルをクリーンアップするには、次のようにします。

string fileName = "isolatestorage.txt";

IsolatedStorageFile storage = IsolatedStorageFile.GetStore(
    IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);

string[] files = storage.GetFileNames(fileName);
foreach(string file in files) {
    if(file == fileName) {
        storage.DeleteFile(file);
        break;
    }
}
于 2008-11-07T13:01:15.280 に答える
2

Microsoft が出荷するデフォルトの web_mediumtrust.config ファイルは、実用的でないことで有名です。

以下は、デフォルトの web_mediumtrust.config ファイルの抜粋です。デフォルトでは、System.IO を使用して temp フォルダーを検出または書き込みすることはできません。

                        <IPermission
                                class="FileIOPermission"
                                version="1"
                                Read="$AppDir$"
                                Write="$AppDir$"
                                Append="$AppDir$"
                                PathDiscovery="$AppDir$"
                        />

@Seb で言及されているように、Isolated Storage を試したことはありませんが、デフォルトの構成ファイルで許可されているようです。

于 2008-11-09T03:23:29.047 に答える
2

ASP.NET シナリオでは、通常のPath.GetTempFilename () メソッドを使用して一時ファイルを取得できます。

NETWORK_SERVICE によって書き込み可能な一時ファイル パスを提供する必要がありますが、アプリケーション フォルダーではなく、実際の Windows の一時フォルダーの 1 つにも存在します。

ホストがサーバーを正しく構成していれば、問題なく動作するはずです。

于 2008-11-07T12:49:43.993 に答える
0

これは、私の質問にコメントしてくれた Leppie への返信です (文字制限を回避するため)。

から: http://blogs.msdn.com/johan/archive/2007/05/16/common-reasons-why-your-application-pool-may-unexpectedly-recycle.aspx

...場合によっては、明確な理由もなくアプリケーション プールが不可解にリサイクルされることがあります。これは通常、構成の問題か、アプリケーション ディレクトリでファイル システム操作を実行していることが原因です。

リサイクルしないって本当ですか?

于 2008-11-07T13:03:27.240 に答える