問題バインディングを変更するWebアプリケーションが起動するときに - 私のマルチユーザアプリのテナントが接続して、私は私のサービスのために別のルートを設定:プログラムで再起動するIISは、WCFサービスをホスト - 私は...これは非常に良いではない状況に陥った
private static void RegisterRoutes()
{
// Setup URL's for each customer
using (var cmc = new CoreModelContext())
{
foreach (var account in cmc.Accounts.Where(aa => aa.IsActive).ToList())
{
RouteTable.Routes.Add(
new ServiceRoute(account.AccountId + "/mobile",
new MyServiceHostFactory(), typeof(MobileService)));
}
}
}
私のサイト/サービスが始まると、データベースからすべてのアカウントを取得し、ルートを設定します。
これはすぐそこの単一障害点です。ときどきサーバーが間違った順序で再起動され、SQL Serverが起動していない場合、このサービスは「奇妙な」モードで起動します。
今日、Webサービスが応答を停止しました。私はログをチェックしました - スケジュールどおりにIISリサイクルプール(デフォルト設定)と異なる作業プロセスを開始しました。クリックしてブームしなかった - サーバーが応答を停止しました。経路は登録されていません...
So.私の質問は..どのように最良の方法を修正するには?私は設定ファイルにルートを入れることができますが、それは2つの場所にそれらのIDを維持する必要があることを意味します。おそらくそれほど悪くないかもしれませんが、私はむしろそれを可能な限り違う方法でやります。
プールをプログラムで試して再起動することはできますか? Application_Start
に例外がスローされたらどうなりますか?今私はそれをトラップしていません。
私は100%あなたに同意します。幸いにも何も私の場合に間違って処理されています。だから、どうすれば "難しい"のだろうか?理想的には、私はそのような方法でIISの試行を続けるような方法で失敗したいと思いますし、SQLへの接続が最終的にはそれを拾うことになる – katit
私はSQLを見ることができないため、 。私の理解は、未処理の例外は、アプリケーションプールを殺すし、開始からそれを保つ必要があります。ちょうど私に当たった別のオプションは、ある種のオフライン監視プロセスです。 –
今私はエラーをトラップしていないし、明らかにそれは動作しません:(オフラインのモニタリングは、顧客が5分後に私に電子メールを送るので必要ではありません:-)私はちょうどそれらの電子メールを最も不適切な時間 – katit