2009-03-14 31 views
6

サイトにユーザーがいる間に、ライブで機能するASP.NET(2.0以上)アプリケーションの更新を処理する方法を把握しようとしています。サイトがライブ中にASP.NET Webアプリケーションを再公開する

たとえば、SOがASP.NET Webアプリケーションプロジェクトであるとします。プロジェクトコードはBINフォルダ内の単一の.DLLまでコンパイルされます。今では常にユーザーがいますので、サイトを使用しているときにVisual Studio .NETの「公開」機能を使用するか、または手動でFTPを使用すると、ユーザーのアクション/セッションはどうなりますか?

ASP.NET Webサイトを作成する代わりに、上記のシナリオに存在する可能性のある問題や存在しない可能性のある問題を緩和しますか?私はユーザー主導のWebアプリケーションとしてWebサイトを開発し始めています。これで私の未経験者は、潜在的に多くのユーザーに24/7を抱かせる可能性はありません。

編集:申し訳ありませんが、私はこれをより正確な文脈に入れておくべきです。このサイトは、毎月の料金でWebホスティングサービスによってホストされているものとします。私はサーバそのものを管理するつもりはなく、Webホストがサービスのユーザとして許しているものだけです。

答えて

4

asp.net Webサイトモデルへの変更は、リサイクルも起こりますが、web.config、global.asax、app_codeのトリガーとなる変更が行われるため、影響はありません。

リサイクル後、asp.netは構文を検証するだけなので、ユーザーはまだログインしています。それはあなたが固定されたマシンキーを使用することが与えられている、そうでなければそれはそれぞれのリサイクルで変更されます。これは、キーの変更が要求、つまりビューステートの検証、埋め込みリソース(URLの復号化に失敗した場合)が破損する可能性があるため、やりたいことです。

セッションをSQL Serverのように処理できない場合は、セッションを失うことはありません。できない場合は、コードで考慮する必要があります。セッションの使用を避けることができるシナリオはたくさんありますが、セッションがクリーンアップされていればそれをラップして情報を再取得できるものもあります。これは、あなたがいくつかの他の提案を既に行っている人のために、あなたが問題をユーザーに与えることができることを知っているいくつかの具体的なケースを残しておく必要があります。

1

アプリケーションを負荷分散環境(Webファーム)に展開する方法があります。
新しいバージョンをデプロイするときは、ロードバランサを使用して、デプロイしていないサーバーにリクエストをリダイレクトします。

0

私はどのようにそれを処理するかわかりません..しかし、私たちは通常、保持ページを置く。だから、ユーザーが何をしているのか(質問の追加や質問への回答)は更新されません。彼が何かを更新するとすぐに、彼はいつか試してみることを求める保持ページを見るでしょう。

私がユーザーであれば、入力した内容がブラウザの履歴に保存されているので、後で投稿することができるように、通常、戻るボタンを押します。

クラスタ化された環境で使用するサイトがあるので、1台のサーバーをオフラインにして、使用できなくなることをロードバランサに通知してから、新しいバージョンが正常に動作していることを確認したら、次のサーバーでも同じことです。

他にもオプションがありますか?

1

App_offline.htmこれは私にとってはすばらしい解決策です。

ですので、展開が開始された時点では、現在アプリケーションが利用できないページが表示されます。

+1

App_offline.htmについて注意すべき点は、Webガーデンでは機能しないということです。 (そうですが、ワーカープロセスは次のページヒットでしか回転しませんので、一気にリフレッシュしなければならず、それらの間でラウンドロビンされることを願っています....)方法。 –

5

IISで2つのWebサイトを作成します。 1つは運用Webサイトで、もう1つはHttpHandlerを持つ静的Webサイトで、HTTP 503サービスを使用できない状態で提供される静的な「We're updating」HTMLページにすべての要求を送信します。通常、更新Webサイトはオフになっています。更新の時期になると、運用Webサイトを停止し、更新Webサイトを開始します。DLLのロックやワーカープロセスのスピンダウンを心配することなく、本番Webサイトを操作することができます。

App_Offline.htmは本当に私たちが使用しているWebガーデンでうまく動作しない

  • ので、私はこれをやって始めました。
  • App_Offline.htmはそのページを404として提供します。これは、意味のある期間中にダウンした場合には問題になります。
  • 変更された設定(ローカルホストでのリッスンのみ)でアップグレードされた本番Webサイトを開始することができます。ここでは、スイッチを反転する前にすべてが機能していることを直ちに受け入れるかどうかを確認し、 - 本番Webサイトを有効にします。あなたはまだページが提供されていないダウンタイムを持っている - これが解決しない

物事は

  • サーバーの再起動を必要とするメンテナンスが含まれています。
  • 最新のService Packへのアップグレードなど、.NETランタイムとは関係のないメンテナンス。私が見てきた

他のアプローチは、二つのサーバを持つ

  • が含まれます。すべてのロードバランシング要求をあるサーバーに送信し、もう一方のサーバーをアップグレードします。リンスして繰り返します。私たちのほとんどはこの贅沢を持っていません。
  • bin-1.0.0.0やbin-1.1.0.0などの複数のbinディレクトリを作成し、web.configファイルで使用するbinディレクトリをASP.NETに指示します。 (これの利点の1つは、以前のバイナリに戻すことは設定ファイルを編集することに過ぎないということです。テンプレートや画像などのバイナリで終わらないリソースを元に戻すことは難しいという欠点があります。これが実際にどのように機能したかを覚えておいてください - アプリケーションが、独自のweb.configセクションに基づいてGlobal.asaxで遅れてアセンブリをロードしたと思います(web.configに触れてからアプリケーションが再起動したので大丈夫でした)。

もっと良い方法が見つかったら教えてください。

+0

非常に良い情報、ありがとう。それだけでなく、あなたの答えは私の元の質問が欠けていた何かを指摘しました。私は自分の質問を編集して、サイトの制約を "$?。?? /月"ウェブホストに追加しました。私はIISなどにアクセスすることはできませんが、この回答は私の仕事に役立ちます; – HardCode

+0

** static ** HTMLファイルのステータスコードの設定方法は分かりますか? –

0

これは技術的な解決策ではありませんが、スケジュールされたメンテナンスウィンドウを設定します。その時間帯にアプリケーションが利用できない可能性があることをユーザーに公平に警告することができます。

関連する問題