我很沮丧……我的网站突然变得非常不稳定。如此之多,以至于一遍又一遍地刷新会导致它崩溃。为了进行调查,我关闭了所有错误处理,以便可以看到一些 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 观看视频。以下是我会采取的一些一般故障排除步骤以及我会问自己的问题:
当它失败时,它是否总是完全相同的异常?还是有所不同?如果总是抛出相同的异常,那么您的逻辑某处可能存在缺陷。如果您遇到完全随机的异常,那么您可能遇到了硬件或基础架构问题。
当您获得 LINQ to SQL 异常时,首先要做的是连接 SQL Profiler 以查看发送到服务器的确切查询语句。将其复制/粘贴到 SQL Management Studio 中并手动运行。查看结果并将它们与您正在加载的对象的数据类型进行比较:查询是否将空值映射到不可为空的字段?也许查询列正在映射到不同类型的属性?
如果它工作了 3-4 分钟,然后停止了 3-4 分钟,然后再次工作,请在您的项目中查找任何特定于时间的代码。你在做任何缓存吗?问题可能与缓存过时和未过时时发生的行为有关,反之亦然。也许您的日期/时间计算会溢出或对某些输入做了一些奇怪的事情?
连接调试器并让它捕获异常。然后走上堆栈跟踪并查看失败期间的程序状态。将其与应用程序正常运行时的程序状态进行比较。有什么突出的吗?
关于c# - 是什么导致我的 ASP.NET MVC/AJAX 网站上出现这些 SQL 转换错误? [视频显示问题],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2273237/