c# - 是什么导致我的 ASP.NET MVC/AJAX 网站上出现这些 SQL 转换错误? [视频显示问题]

标签 c# sql asp.net-mvc ajax linq

我很沮丧……我的网站突然变得非常不稳定。如此之多,以至于一遍又一遍地刷新会导致它崩溃。为了进行调查,我关闭了所有错误处理,以便可以看到一些 YSOD。

我没有试图把它全部写出来,而是制作了一个视频来展示这个问题。 You can see it here on YouTube .

这是堆栈跟踪的副本:

[InvalidCastException: Specified cast is not valid.]
   System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult) +847
   System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries) +113
   System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query) +344
   System.Data.Linq.DataQuery`1.System.Linq.IQueryProvider.Execute(Expression expression) +23
   System.Linq.Queryable.Count(IQueryable`1 source) +240
   MvcPaging.PagedList`1.Initialize(IQueryable`1 source, Int32 index, Int32 pageSize, Nullable`1 totalCount) in C:\Users\BikGame\Desktop\src\MvcPaging\PagedList.cs:63
   MvcPaging.PagedList`1..ctor(IQueryable`1 source, Int32 index, Int32 pageSize, Nullable`1 totalCount) in C:\Users\BikGame\Desktop\src\MvcPaging\PagedList.cs:25
   MvcPaging.PagedList`1..ctor(IQueryable`1 source, Int32 index, Int32 pageSize) in C:\Users\BikGame\Desktop\src\MvcPaging\PagedList.cs:19
   MvcPaging.PagingExtensions.ToPagedList(IQueryable`1 source, Int32 pageIndex, Int32 pageSize) in C:\Users\BikGame\Desktop\src\MvcPaging\PagingExtensions.cs:63
   ApoAds.Controllers.HomeController.Index() in C:\Users\BikGame\Documents\Visual Studio 2008\Projects\APOAds-MultiBaseBiz\Controllers\HomeController.cs:22
   lambda_method(ExecutionScope , ControllerBase , Object[] ) +39
   System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +178
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +24
   System.Web.Mvc.<>c__DisplayClassa.<InvokeActionMethodWithFilters>b__7() +53
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +258
   System.Web.Mvc.<>c__DisplayClassc.<InvokeActionMethodWithFilters>b__9() +20
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +258
   System.Web.Mvc.<>c__DisplayClassc.<InvokeActionMethodWithFilters>b__9() +20
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +193
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +382
   System.Web.Mvc.Controller.ExecuteCore() +123
   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +23
   System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +7
   System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext) +144
   System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext httpContext) +54
   System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext httpContext) +7
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +181
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75

在试图加载的页面上,有两个对 View 的 ajax 调用,它们访问数据库、呈现表格并返回 html。网站顶部的部分菜单是从数据库中提取出来的,然后缓存起来以防止多次返回。在中等信任的共享环境中托管在 IIS6 上。

疯狂的是它是如何工作的,然后停止工作 3-4 分钟然后再次工作......也许是一个 sql 连接挂起然后在几分钟后超时?

任何想法将不胜感激!提前致谢!

更新:添加数据访问代码

我在存储库模式中使用 LINQ to SQL。这是其中一个 AJAX 调用正在使用的查询。

public IQueryable<Ad> FindAdsPerBase(string baseName, AdStatus status)
{
    return (from ad in _db.Ads
            join b in _db.AdBases on ad.AdID equals b.AdID
            where b.MilBase.BaseName.ToLower() == baseName.ToLower() && ad.Status == (byte)status
            select ad).Distinct().OrderByDescending(x => x.DateEntered);
}

它在 Controller 中是这样调用的:

var ads = _db.FindAdsPerBase(MilBase, AdStatus.Active).Take(11);

最佳答案

您没有提供足够的信息来进行故障排除,而且(无意冒犯)我不会前往 YouTube 观看视频。以下是我会采取的一些一般故障排除步骤以及我会问自己的问题:

  1. 当它失败时,它是否总是完全相同的异常?还是有所不同?如果总是抛出相同的异常,那么您的逻辑某处可能存在缺陷。如果您遇到完全随机的异常,那么您可能遇到了硬件或基础架构问题。

  2. 当您获得 LINQ to SQL 异常时,首先要做的是连接 SQL Profiler 以查看发送到服务器的确切查询语句。将其复制/粘贴到 SQL Management Studio 中并手动运行。查看结果并将它们与您正在加载的对象的数据类型进行比较:查询是否将空值映射到不可为空的字段?也许查询列正在映射到不同类型的属性?

  3. 如果它工作了 3-4 分钟,然后停止了 3-4 分钟,然后再次工作,请在您的项目中查找任何特定于时间的代码。你在做任何缓存吗?问题可能与缓存过时和未过时时发生的行为有关,反之亦然。也许您的日期/时间计算会溢出或对某些输入做了一些奇怪的事情?

  4. 连接调试器并让它捕获异常。然后走上堆栈跟踪并查看失败期间的程序状态。将其与应用程序正常运行时的程序状态进行比较。有什么突出的吗?

关于c# - 是什么导致我的 ASP.NET MVC/AJAX 网站上出现这些 SQL 转换错误? [视频显示问题],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2273237/

相关文章:

c# - 如何创建与 Rectangle 兼容的自定义结构?

sql - 将多个语句之间传递给存储过程

mysql - 在 1 次查询中选择 5 条前一条记录、中间条和 5 条后一条记录

jquery - 通过 jquery 更改 DisplayFor Text/Value

c# - 从 WCF 服务返回时出现 System.EngineExecutionException

c# - 将C++ Pkcs7符号移植到C#

sql - 在 PostgreSQL 中缩写列表

asp.net-mvc - 我不断收到 MVC3 的 HTML5 语法错误

asp.net-mvc - 如何在 MVC 中保留复选框列表

c# - 'System.ServiceModel.Diagnostics.TraceUtility' 的类型初始值设定项抛出异常