9

我刚刚在我不起眼的专用服务器 (Win2003) 上启动了我的微型 web 应用程序...运行 ASP.NET MVC、LINQ2SQL、SQL Express 2005 和 IIS6(使用通配符映射设置)

该网站90%的时间运行顺利。但是,在相对较高的流量上,LINQ2SQL 会抛出错误:Specified cast is not valid

此错误仅在高流量时引发。我知道这是如何发生的或究竟为什么会发生。缓存并没有完全消除这个问题。

以前有人见过这个问题吗?有什么我应该做的秘密 SQL Server 调整吗?或者至少,关于如何诊断这个问题的任何想法?因为我出去了!

奈米

Stacktrace(来自事件日志):

在 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()
   在 C:\Web\Models\DudlersDataContext.cs:line 562 中的 Dudlers.Web.Models.DudlersDataContext.GetFriendRequests(Guid userId)
   在 Dudlers.Web.Controllers.BaseController.View(String viewName, String masterName, Object viewData) 在 C:\Web\Controllers\BaseController.cs:line 39
   在 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 控制器,Object[] 参数)
   在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(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 方法信息,IDictionary`2 参数,IList`1 过滤器)
   在 System.Web.Mvc.ControllerActionInvoker.InvokeAction(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 步骤,Boolean& 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 的不同实例上,然后发生在所有随后的实例上。

经过一些研究并在这个线程中询问,我发现原因是我没有处理 DataContexts。在我开始这样做之后,它就消失了。

于 2009-04-23T05:38:33.170 回答
3

听起来可能是竞争条件,或者可能是仅与高流量相关的罕见错误,因为您的大多数请求发生时。

于 2008-11-25T20:25:21.170 回答