求めていることを処理する方法はいくつかあり、質問にはいくつかの異なる側面があります。
プロモーションの小さな更新を処理する
ここで本当に必要なのは、コンテンツをオンザフライで編集できるコンテンツ管理システムまたは類似のものです(Wordpress / Drupalまたは.NETの視点N2 CMS、Umbraco、Orchardなどから)そのルートを下っていない場合に試すことができるものがいくつかあります。
ASP.NETは特定の種類のファイル(web.config(s)、/bin/
およびコンテンツの/app_code/
ほとんどがフォルダ)に触れた場合にのみリロードされるため、「その他のファイルの変更」(基本的に変更後は基本的にサイト内の多くのファイルがアプリケーションプールを再起動します- NumRecompilesBeforeAppRestart
).html
必要に応じてプルして表示するいくつかの静的(つまり)ファイルを別のフォルダーで確認するかLoadControl
、文字列パスを取得するメソッドを利用する.ascx
ユーザーコントロールと動的にロードする-あなたがより多くのStackOverflowのに適した別の質問で、表示するかを決定する方法-しかし私は、命名規則ベースのソリューションをお勧めします。
また、Managed Extensibility Framework(MEF-バージョン4以降、.NETフレームワークの一部である)のようなものを使用することも検討できます。これにより、プラグインベースのアーキテクチャを記述し、/bin/
監視するディレクトリ外のフォルダーを指定できます。新しい.DLL-アプリの再起動の問題を回避するかどうかを確認するためにこれを試したことはありませんが、サイトに一般的な機能を追加するためにWeb環境でこれを使用して効果を上げました。
それが魅力的でない場合、私が考えることができる唯一の他のオプションは、古典的なASPで行ったようにコントロールを「コードインフロント」として追加することです。つまり<script runat="server">
、コンパイルされた「コードビハインド」クラスの代わりにブロックを使用することです制御を実行するためのロジックが含まれている-制御がオンザフライでコンパイルされているので、これは、いくつかの最初の時のパフォーマンスの損失を犠牲にして、DLLの変更の必要性を除去します-もう一度あなたとこのバランスを取る必要がありますNumRecompilesBeforeAppRestart
あなたの場合'多くの小さな変更を行っています。
アプリの再起動後もセッションを維持するにはどうすればよいですか?
これはおそらく解決しやすい問題であり、3つの重要な手順が含まれます。
- MachineKey(IIS7、ただし8を保持)を一定の値ではなく構成します
AutoGenerate
-これは、AppPoolのリサイクル時に同じキーを使用するため、以前からセッションCookie、ビューステートなどを復号化できることを意味しますリサイクル。
- どちらの設定状態サーバーまたはセッション状態を保持するデータベースを設定。
- を使用
InProc
するStateServer
かSQLServer
、web.configのSessionState要素で切り替えます。
これにより、アプリの再起動後も存続する永続的なセッションが実現します。ただし、これらは「無料」ではありません。セッションに保存するものはすべてシリアル化可能でなければならず、ページの読み込みごとにネットワークデータを取得してセッションデータを解放する必要があるため、わずかなパフォーマンスヒットが発生します。
ただし、展開後にアプリケーションが再起動するのに「数分」かかる場合は、負荷分散環境、または少なくともホットスワップ可能なステージング/ライブセットアップへの移行を検討することをお勧めします。 (Azure / AWSなどによって提供されるものなど)-この方法では、サーバーを更新中にオフラインにするか、新しいコードで準備してからスワップインできます-共有に対処するための手順を実行した場合セッション(上記参照)は、ユーザーに影響を与えることなく正常に機能します。