相同的构建不适用于2个不同的相同环境

时间:2015-03-27 12:20:52

标签: c# iis model-view-controller web

我已经没有选择这可能是什么,因此我的问题在这里。 我公司有一个大型仪表板类型的网站。

  • 构建适用于Dev invironment。
  • 构建部署到Dev环境和生产环境
  • 2个环境在操作系统和补丁级别上相同。
  • 部署到两台服务器的整个代码库是100%相似的(因为它是通过部署的 TeamCity和构建从dev推广到prod。)
  • 我在prod上更改了web.config以使用相同的connectionStrings(因此可以排除DB问题)
  • ApplicationPools也是100%完全相同 - .NET 4 - 集成

失败的部分是从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

1 个答案:

答案 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调用中可以观察到的连接(标识)或参数的影响。

您的开发人员是否仍在问或者这是遗留代码吗?

相关问题