2016-04-10 10 views
1

Microsoft Azureでホストした後、Entity FrameworkベースのWebサイトで問題が発生しました。約30分でサーバーに呼び出しが行われなかった場合、サーバーは完全に応答を停止し、すべての要求に対して内部サーバーエラー(500)を返します。Entity Frameworkサーバーのタイムアウト

サイトをローカルで実行していても問題ありませんでした。何も起こらずに何時間も実行していても問題ありませんでした。私は15分ごとにサーバーにpingを実行するループを実行することで問題を解決できましたが、それは明らかに良い解決策ではありません。だから私の質問は:どのように私は使用していないときに死ぬのを防ぐために私のサーバーの接続プロパティを設定できますか?

私はコネクション認証についてはほとんど知りませんが、唯一のエラーは内部サーバーエラー(何も表示されません)が発生した場合のトラブルシューティング方法がわかりません。ここで

のGithub上のコードです:私はあなたと共有したいという気になりましたhttps://github.com/synthc/UMD.git

+1

私はこの問題に直面しませんでしたが、ワーカースレッドが30分間使用しないとリサイクルされているのかどうか疑問です。データベースのコンテキストを長期間保存していますか? – Basic

+0

まあ、私はDBコンテキストを再初期化することは何もしていないので、再割り当てされることはないと思います(それは悪いことですか?)。 – synthc

+0

私は最近のAzureの経験がないので、直接コメントすることはできません。私のMVCアプリケーションでは、dbコンテキストは要求の存続期間中存在します。そうすれば、他のリクエストに干渉することを心配することなく、変更を元に戻すようなことをすることができます。 Unityを使ってDBContextを取得する方法を見てみましょう。それはあなたのためにオブジェクトの寿命を処理することができます。 http://stackoverflow.com/a/18264598/156755を参照してください – Basic

答えて

1

ものの数 - すでに基本が指摘しているの1。

:あなたのWebアプリは「スリープ状態になる」ということに思えるかもしれません理由が原因でオフにすることができAzureのWebアプリケーションでの機能である -

だから、最初のオフには、必ず

Always On description

この機能の詳細については、hereを参照してください。

あなたのウェブアプリケーションをバックアップしようとしている間、何かが間違っていると思われます。

DataContextの寿命管理

ので、確かに、基本として指摘 - 私はあなたのコントローラにあなたのEntity Frameworkの(EF)コンテキストに依存性注入(DI)を使用することをお勧めします。これにより、単一の要求の存続期間にわたってEFデータのコンテキストが提供され、コンテキストが大幅に低下して障害状態になることがあります。

Ninjectは、私が最も頻繁に使用されるDIコンテナで、ここではそれはASP.NET MVCで動作するように取得する方法の書き込みアップです:最後にhttp://www.davepaquette.com/archive/2013/03/27/managing-entity-framework-dbcontext-lifetime-in-asp-net-mvc.aspx

Entity Frameworkの実行戦略

- EFはデータベースに対して異なる実行戦略を提供します。 Azureの接続には特別なものがあります。ここに記載されているようにSqlAzureExecutionStrategyを有効にすることを検討することを望みます:https://msdn.microsoft.com/en-us/data/dn456835.aspx。これは、クラウドで発生する可能性のある一時的なフォールト処理をより適切に処理します。

あなたがこのすべてを使っているなら、あなたはうまくいくはずです。あなたは500人もなくなるはずです。

+0

答えをありがとう。申し訳ありませんが、Azureのサブスクリプションでは、常にオンにすることはできません(今アップグレードしています)。依存性注入に関しては、私はすでにNinjectを使って私のカスタムリポジトリをインターフェースにバインドしています。そして、それを私のコントローラに注入しています。これは、リポジトリ内で初期化されているので、リクエストごとに一度dbコンテキストを初期化する必要があります。 – synthc

+0

DIコンテナは、作成したインスタンスのライフタイム(別名スコープ)を適用するように設定されます。 NInjectについては、[オブジェクトのスコープのドキュメント](https://github.com/ninject/ninject/wiki/Object-Scopes)、具体的には[InRequestScope](https://github.com/ninject/Ninject.Web.Common/wiki/InRequestScope) – Basic

+0

Always Onを有効にしているようです。ありがとう。 – synthc

関連する問題