c# – 在我的ASP.NET MVC / AJAX站点上导致这些SQL转换错误的原因是什么? [视频显示问题]

我很沮丧……我的网站突然变得非常不稳定.这么多,一遍又一遍地刷新将导致它崩溃.为了调查,我关闭了所有错误处理,所以我可以看到一些YSOD.我没有尝试全部写出来,而是制作了一个显示问题的视频. You can see it here ...

我很沮丧……我的网站突然变得非常不稳定.这么多,一遍又一遍地刷新将导致它崩溃.为了调查,我关闭了所有错误处理,所以我可以看到一些YSOD.

我没有尝试全部写出来,而是制作了一个显示问题的视频. You can see it here on YouTube.

这是stacktrace的副本:

[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

在尝试加载的页面上,有两个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);
}

并在控制器中调用它,如下所示:

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

解决方法:

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

>当它失败时,它总是完全相同的例外吗?或者它有变化吗?如果总是抛出相同的异常,那么你的逻辑中可能存在缺陷.如果您获得完全随机的异常,则可能存在硬件或基础结构问题.
>当您获得LINQ to SQL异常时,要做的第一件事就是连接SQL事件探查器以查看发送到服务器的确切查询语句.将其复制/粘贴到SQL Management Studio中并手动运行.查看结果并将它们与您正在加载的对象的数据类型进行比较:是否将空值映射到不可为空的字段?也许查询列被映射到不同类型的属性?
>如果它工作3-4分钟,然后停止3-4分钟,然后再次工作,在项目中查找任何特定于时间的代码.你在做任何缓存吗?也许这个问题与缓存陈旧时的行为相关,而不是陈旧时的行为,反之亦然.也许你有一个日期/时间计算溢出或为某些输入做一些时髦的事情?
>连接调试器并让它捕获异常.然后向上走堆栈跟踪并查看失败期间的程序状态.在应用程序正常工作时将其与程序状态进行比较.有什么突出的吗?

本文标题为:c# – 在我的ASP.NET MVC / AJAX站点上导致这些SQL转换错误的原因是什么? [视频显示问题]

基础教程推荐