0

私には状況があります:

ユーザーコントロールをWebアプリにアップロードし、必要に応じてロードします。時々私はそれらのいくつかが欲しくない。したがって、Webアプリケーションからそれらを削除したいと思います。

コントロールが見つかる階層は次のとおりです。

/controls
/controls/uc/
/controls/uc/ctrl1/ctrl1.ascx(with ctrl.ascx.cs)
/controls/uc/ctrl2/ctrl2.ascx(with ctrl.ascx.cs)

これで、delete.aspxから、ディレクトリ構造を選択する場所からこのコードを取得できます。制御ディレクトリ「ctrl1(n)」を取得し、deleterecursiveを使用してディレクトリを削除します。

削除が終わったら、asp.netのリダイレクト機能を使用してページをリダイレクトします。しかし、Webページがリダイレクトされるとすぐに、セッションが終了し、ログインするように求められます(ログインしているユーザーのみがコントロールを削除できるため)

なぜその奇妙な行動なのですか?

上記のように、app_codeにコードが見つからないことを忘れないでください。すべてのコントロールは、Webサイトのルートの下に配置されます。

編集:もちろん、プリコンパイルされていません!

何か助けはありますか?

4

3 に答える 3

1

実行中のアプリケーション (Web サイト プロジェクトであっても) でクラスを削除すると、ほとんどの場合、アプリケーション プールのリサイクルが発生し、セッションやその他すべてが終了します。
ユーザー コントロールをアップロードするというこの全体的な考え方は、非常に奇妙に思えます。

詳細については、ASP.NET のケース スタディ: セッション変数が失われ、アプリドメインがリサイクルされる

于 2012-06-05T09:13:06.180 に答える
1

ディレクトリ構造を変更するたびに (ただし、ファイルは変更しないでください)、アプリ プールのリサイクルが発生します。何をしているのか疑わしいですが、フォルダー (ファイルのみ) を削除しないでください。問題はありません。

于 2012-06-05T09:28:11.870 に答える
0

わかりました、私はこの問題の解決に時間を費やしました...それは解決策ではないかもしれませんが、これまでのところ私が望んでいたことは達成されました.

私がしたことは、セッション状態を「StateServer」として定義し、フォルダーを削除するとアプリケーションプールが再起動されますが、セッションは生きたままです。アプリケーション プールのリサイクルは、Web サイトのサブフォルダーの削除など、いくつかの要因に依存しているため、たまたま停止することはできませんが、実際にはセッションを維持できます。フォルダを削除しても、セッションが失われることはありませんが、もちろんアプリケーションが再起動されますので、何としても受け入れる必要があります。

ともかく、

ホスティングの web.config で次の構成ノードを使用しました。

<system.web>
    <sessionState mode="StateServer"  cookieless="false" timeout="20" />
</system.web>

そしてもちろん、私のローカルホストでこれを行いました:

<system.web>
    <sessionState mode="StateServer"  stateConnectionString="tcpip=127.0.0.1:42424" cookieless="false" timeout="20" />
</system.web>

注: localhost では、ASP.NET 状態管理サービスを開始する必要があります。

概要:

  1. セッションを保持するには、SessionState を StateServer または SqlServer として定義する必要があります。それはあなたができる最低限のことです。

  2. このようなアプリケーションを開発するときは、アプリケーションの再起動サイクルに対処する方法を提供する必要があります

  3. セッション変数はできるだけ単純に保つ必要があります。大きなオブジェクトや他の多くのオブジェクトに依存するオブジェクトを配置しないでください。シリアライゼーションとデシリアライゼーションは、それらを行ったり来たりするのに多くの時間がかかります。

于 2012-06-11T08:07:28.840 に答える