2

Webサービスを作成していて、次のことがわかります。Webサービスによって参照されるすべてのdllが保存されているディレクトリ(bin)にテキストファイルを追加するだけでも、appdomainが更新されます。

これにより、(dllの1つにある)ディクショナリに保存されているすべてのユーザーセッションが消去されます。

たとえば、上記の辞書がdll、たとえばsessiondict.dllに含まれていて、依存関係のない別のdllをsessiondict.dllに置き換える場合、なぜこのデータが失われる必要があるのでしょうか。

私は何かが足りないのですか?

編集:

AppDomainの再起動について詳しく読んでいますが、binフォルダーにテキストファイルを追加してもappdomainが再起動するように設計されている理由については、まだ理解できていません。

4

2 に答える 2

2

これは標準的な動作です。binディレクトリ内の何か(およびweb.configなどの他の場所)に触れると、appdomainがリサイクルされます。

binディレクトリ内にデータを保存しないでください。また、IISは、指定しない限り、デフォルトでappdomainを定期的にリサイクルすることに注意する必要があります(デフォルトでは1日1回と思います)。

とにかくアプリケーションの一部を置き換えることはできないので、これを行う正当な理由がわかりませんか?

この投稿は、AppDomainのリサイクルを引き起こす可能性のあるものについての良い説明です。

于 2012-06-11T15:46:47.437 に答える
0

DictionaryAppドメイン内のメモリにあるローカル変数に保存されます。binフォルダーのコンテンツが更新されると、AppDomainはリサイクルされます。リサイクルとは、.NETが既存のAppDomainをアンロードし(ロードされたすべてのクラスに格納されているすべてのローカル変数によって使用されるメモリを消去)、新しいAppDomainを構築し、新しいクラスを開始することを意味します(Dictionaryコードに空が作成される可能性があります)。

DLLが変更されたかどうかは関係ありません。ClassASP.NETは、binフォルダーの変更が構成に影響を与えると見なし、サイトを新しい構成で再起動する必要があるため、のインスタンスは破棄されます。

この問題を解決するには、次のようにします。

  1. 重要なセッション変数を永続ストレージに保存する(推奨)
  2. BINフォルダの内容は更新しないでください。
于 2012-06-11T15:56:50.250 に答える