我已经没有选择这可能是什么,因此我的问题在这里。 我公司有一个大型仪表板类型的网站。
失败的部分是从SQL表中获取数据的模型,但显然返回null(在生产环境中,而不是在dev环境中)
只有一个模型的某个模型失败并且出现空参考异常,并且只在生产服务器上,其他一切正常,所有连接都很好 - 没有。
生产服务器上的早期版本工作正常(没有错误) - 并且没有任何内容更改为错误所在的站点。
任何有好主意的人?
我很难相信这可能是编码问题。 但在我看来,开发人员对这类事情经验最丰富,因此我在这里发布了这个问题。
我不能,因为我的生活中找出了可以留给我尝试的东西。
NB: 失败的行是
@if (Model.ShowTsm && Model.ShowCv)
使用: 对象引用未设置为对象的实例。
stacktrace:
System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +279
System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +125
System.Web.WebPages.StartPage.ExecutePageHierarchy() +142
System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +180
System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +383
System.Web.Mvc.<>c__DisplayClass1a.<InvokeActionResultWithFilters>b__17() +32
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +970660
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +265
System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +956732
System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +28
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +20
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +67
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +20
System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +53
System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +42
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +20
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +53
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +469
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +375
答案 0 :(得分:1)
我看到开发人员添加了一些“#34;聪明的&#34;之前的代码。您需要消除几件事。
我只想确认,当你说&#34;相同的连接字符串&#34;时,连接字符串使用的是用户名和密码,而不是&#34;集成安全性&#34;。因为那不完全相同。如果使用用户名和密码,则继续(下一段)。
要尝试的第二件事:根据主机(服务器)名称确定代码是否正在发送不同的DB调用。使用&#34; SQL profiler&#34;在错误期间嗅探(间谍)对数据库的调用。打开SSMS(SQL Server Management Studio),(菜单)工具,SQL Server Profiler,连接到您的数据库(两个服务器正在与之交谈的数据库)。关于&#34;跟踪属性&#34;屏幕,&#34;使用模板&#34; TSQL。 (如果没有显示太多,则切换到模板TSQL_SPs)。 [ 跑 ]。立即停顿。使用您的应用程序直到您几乎处于失败的部分(然后取消暂停)。观察从dev vs prod发出的电话。除了参数或SQL命令的主要差异之外,我无法准确地告诉您要查找的内容。
第三(并且不太可能)。可以在任何计算机上配置SQL连接属性,这些属性不明显(或看起来隐藏)。您可以使用&#34; Sql Server配置管理器(操作系统:开始菜单,所有程序,SQL Server 2008,配置工具,Sql Server配置管理器)。如果它不在您的开始菜单中,那么您可能需要获取安装光盘并添加&#34; SQL客户端工具&#34;。检查任何别名。确保使用相同的协议。
其他(非常不可能)的事情:1)您可能希望使用内存分析器来查看加载到内存中的内容。我使用了一些奇怪的工具来查看内存中的DLL及其版本。 2)如果您的开发人员在90年代之前出生,那么他们可能会疯狂到在注册表或hosts / lmhosts文件中设置值。
如果这些都没有帮助,请告诉我。我有更多的想法,但每一个都更加模糊。我打赌这个问题会受到DB调用中可以观察到的连接(标识)或参数的影响。
您的开发人员是否仍在问或者这是遗留代码吗?