9

ささやかな専用サーバー (Win2003) で小さな Webアプリケーションを起動しました... ASP.NET MVC、LINQ2SQL、SQL Express 2005、および IIS6 (ワイルドカード マッピングを使用したセットアップ)を実行しています。

Web サイトは 90% の時間でスムーズに動作します。ただし、トラフィックが比較的多い場合、LINQ2SQL は次のエラーをスローします: 指定されたキャストは有効ではありません

このエラーは、トラフィックが多い場合にのみスローされます。これがどのように、または正確になぜ起こるのか、私にはわかりません。キャッシングは、この問題を完全には解決しませんでした。

この問題を以前に見た人はいますか?私がやるべきだった秘密のSQL Serverの微調整はありますか? または、少なくとも、この問題を診断する方法に関するアイデアはありますか? 出たから!

ナイミ

スタックトレース (イベント ログから):

System.Data.SqlClient.SqlBuffer.get_SqlGuid() で
   System.Data.SqlClient.SqlDataReader.GetGuid (Int32 i) で
   Read_Friend(ObjectMaterializer`1) で
   System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext() で
   Dudlers.Web.Models.DudlersDataContext.GetFriendRequests (Guid userId) で C:\Web\Models\DudlersDataContext.cs:line 562
   C:\Web\Controllers\BaseController.cs:line 39 の Dudlers.Web.Controllers.BaseController.View (String viewName, String masterName, Object viewData) で
   System.Web.Mvc.Controller.View (文字列ビュー名) で
   C:\Web\Controllers\CatController.cs:line 25 の Dudlers.Web.Controllers.CatController.Index() で
   lambda_method(ExecutionScope、ControllerBase、Object[])で
   System.Web.Mvc.ActionMethodDispatcher.Execute (ControllerBase コントローラー、オブジェクト [] パラメーター) で
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod (MethodInfo methodInfo、IDictionary`2 パラメーター) で
   System.Web.Mvc.ControllerActionInvoker.c__DisplayClassb.b__8() で
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter (IActionFilter フィルター、ActionExecutingContext preContext、Func`1 継続) で
   System.Web.Mvc.ControllerActionInvoker.c__DisplayClassb.c__DisplayClassd.b__a() で
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters (MethodInfo methodInfo、IDictionary`2 パラメーター、IList`1 フィルター) で
   System.Web.Mvc.ControllerActionInvoker.InvokeAction (ControllerContext controllerContext、文字列 actionName) で
   System.Web.Mvc.Controller.ExecuteCore() で
   System.Web.Mvc.ControllerBase.Execute (RequestContext requestContext) で
   System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute (RequestContext requestContext) で
   System.Web.Mvc.MvcHandler.ProcessRequest (HttpContextBase httpContext) で
   System.Web.Mvc.MvcHandler.ProcessRequest (HttpContext httpContext) で
   System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest (HttpContext httpContext) で
   System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() で
   System.Web.HttpApplication.ExecuteStep (IExecutionStep ステップ、ブール値 & completedSynchronously) で
4

2 に答える 2

7

LINQでも同様の問題が発生し、「タイプ'System.Int32'のオブジェクトをタイプ'System.String'にキャストできません」および「指定されたキャストが無効です」という問題が発生しました。

スタックトレースの例

System.InvalidCastException: Unable to cast object of type 'System.Int32' to type 'System.String'.
   at System.Data.SqlClient.SqlBuffer.get_String()
   at System.Data.SqlClient.SqlDataReader.GetString(Int32 i)
   at Read_Person(ObjectMaterializer`1 )
   at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at RF.Ias.Services.Person.BusinessLogic.PersonTransactionScripts.GetPersons(IEnumerable`1 personIds, Boolean includeAddress, Boolean includeContact)
   at CompositionAopProxy_5b0727341ad64f29b816c1b73d11dd44.GetPersons(IEnumerable`1 personIds, Boolean includeAddress, Boolean includeContact)
   at RF.Ias.Services.Person.ServiceImplementation.PersonService.GetPersons(GetPersonRequest request)


System.InvalidCastException: Specified cast is not valid.
   at System.Data.SqlClient.SqlBuffer.get_Int32()
   at System.Data.SqlClient.SqlDataReader.GetInt32(Int32 i)
   at Read_GetRolesForOrganisationResult(ObjectMaterializer`1 )
   at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at RF.Ias.Services.Role.DataAccess.RoleDataAccess.GetRolesForOrganisation(GetRolesForOrganisationCriteria criteria, Int32 pageIndex, Int32 pageSize, Int32& recordCount)
   at RF.Ias.Services.Role.BusinessLogic.RoleTransactionScripts.GetRolesForOrganisation(GetRolesForOrganisationCriteria criteria, Int32 pageIndex, Int32 pageSize, Int32& recordCount)
   at CompositionAopProxy_4bd29c6074f54d10a2c09bd4ab27ca66.GetRolesForOrganisation(GetRolesForOrganisationCriteria criteria, Int32 pageIndex, Int32 pageSize, Int32& recordCount)
   at RF.Ias.Services.Role.ServiceImplementation.RoleService.GetRolesForOrganisation(GetRolesForOrganisationRequest request)

「System.InvalidOperationException:このコマンドに関連付けられた開いているDataReaderがすでにあり、最初に閉じる必要があります」のような例外を最初に取得した場合、これらの例外を取得していました。または「サーバーから結果を受信するときにトランスポートレベルのエラーが発生しました。(プロバイダー:TCPプロバイダー、エラー:0-既存の接続がリモートホストによって強制的に閉じられました。)」

最初の例外は、DataCOntextの別のインスタンスで発生し、その後に続くすべてのインスタンスで発生します。

このスレッドで調査と質問を行った結果、DataContextを破棄しなかったことが理由であることがわかりました。私がそれを始めた後、それは消えました。

于 2009-04-23T05:38:33.170 に答える
3

おそらく競合状態、またはほとんどのリクエストが発生するため、トラフィックが多い場合にのみ相関するまれなバグのように聞こえます。

于 2008-11-25T20:25:21.170 に答える