私は時々、データベースへのアクセスを失う Web サイトを持っています。Web サイトは引き続き IIS で実行されており、問題なくフロント ページにアクセスできます。
開発やテストではこのエラーに遭遇したことはなく、ライブでのみ発生しました。
私の最初にログに記録された例外は、常に InvalidCastException のようで、次のスタック トレースがあります。
06-03-2013 09:06:26
The exception was: Specified cast is not valid.
at System.Data.SqlClient.SqlBuffer.get_Int32()
at System.Data.SqlClient.SqlDataReader.GetInt32(Int32 i)
at Read_Question(ObjectMaterializer`1 )
at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext()
at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source)
at System.Data.Linq.EntityRef`1.get_Entity()
at DB.TempQuestion.get_Question() in xxxx\DBLinq.designer.cs:line 9808
at xxxx.TestController.BuildBarHelperForPersonAssignment(PersonAssignment pa) in xxxx\TestController.cs:line 751
at xxxx.TestController.BuildMovieModel(TempMovie tm, PersonAssignment pa) in xxxx\TestController.cs:line 792
at xxxx.TestController.ShowMovie(TempMovie tm, PersonAssignment pa) in xxxxx\TestController.cs:line 636
at xxxx.TestController.Index(String id, FormCollection form, Nullable`1 currentid, String type, Int32[] selectedTest) in xxxx\TestController.cs:line 313
この後、あらゆる種類の InvalidCastExceptions と「サーバーはトランザクションを再開できませんでした」というエラーが発生します。
エラーが発生した場所は非常に明確です。私の問題は、なぜこれが起こっているのか、なぜアプリケーションがデータベースへのアクセスを失うのかということです?
エラーはこのすべての前のどこかにあると思います。
私のアプリケーションのセットアップ:
ASP.NET MVC2、LINQ2SQL、MsSQL サーバー 2008 R2、IIS 7.5 (ASP 2.0)
私のコントローラーのセットアップ:
コントローラーを再設計する必要があるのではないかと心配しています。コントローラーはほとんどすべてこのように見えます。
[Authorize(Roles = "xxxxx")]
Public class ABController : Controller
{
private readonly DBLinqDataContext _db = new DBLinqDataContext();
public ActionResult Index()
{
...
}
}
DBLinqDataContext が閉じられていないために、このエラーが発生する可能性はありますか?
次のオーバーライドされたメソッドを追加すると役立つでしょうか?
protected override void Dispose(bool disposing)
{
_db.Dispose();
base.Dispose(disposing);
}
さらに情報が必要な場合はお知らせください。