2011-12-09 6 views
0

問題バインディングを変更する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に例外がスローされたらどうなりますか?今私はそれをトラップしていません。

答えて

0

これは「修正」ですが、同様の依存関係の問題がある場合は、他の依存関係が「奇妙な」モードで正常に開始できないことを確認します。 SQL Serverが稼働していない場合は、少なくとも本番環境ではこのアプリケーションをダウンさせることになります。間違って処理されているものよりも何も処理されていないほうがずっと良いです。

+0

私は100%あなたに同意します。幸いにも何も私の場合に間違って処理されています。だから、どうすれば "難しい"のだろうか?理想的には、私はそのような方法でIISの試行を続けるような方法で失敗したいと思いますし、SQLへの接続が最終的にはそれを拾うことになる – katit

+0

私はSQLを見ることができないため、 。私の理解は、未処理の例外は、アプリケーションプールを殺すし、開始からそれを保つ必要があります。ちょうど私に当たった別のオプションは、ある種のオフライン監視プロセスです。 –

+0

今私はエラーをトラップしていないし、明らかにそれは動作しません:(オフラインのモニタリングは、顧客が5分後に私に電子メールを送るので必要ではありません:-)私はちょうどそれらの電子メールを最も不適切な時間 – katit

関連する問題