生产MVC应用程序和本地应用程序之间的System.Data.DataSet操作不同

时间:2014-10-15 19:50:22

标签: jquery asp.net asp.net-mvc asp.net-web-api pass-by-reference

我有一个ASP.NET MVC应用程序,其功能与SSRS报告非常相似 - 加载System.Data.DataSet并在网格中显示它的内容。我已经使用了一些jquery控件来允许某种程度的客户端操作。

我有一些'动作',用户可以对网格中的选定项目执行。当他们单击“操作面板”中的按钮时,我会制定一个Web请求,它基本上告诉WebAPI控制器用户在UI中使用哪个System.Data.DataRow。

WebAPI控制器不只是“信任”或直接使用发布的数据。相反,它使用postingData作为指南返回模型(System.Data.DataSet)并找到用户在其客户端上选择的精确DataTable和DataRow。

我的一个'动作处理'.NET类给了我悲伤。它应该更新传递给它的DataRow中的一些值。 可能导致这种情况的原因是什么?和/或如何调试?

行通过'引用'传递,当我在本地测试它时(使用Visual Studio ASP.NET开发服务器)一切正常 - 可以单击按钮,WebAPI调用所需的操作并传入所需的DataRow它向jquery ajax调用者返回一条“成功”消息。这会触发UI刷新,并且您可以在屏幕上看到更新的值。

为什么这会停止在我的生产运行IIS 7.5.7600的Windows 2008 R2服务器上运行? 我已经清理了web app / bin并从我的Visual Studio项目重新部署了新的内容。


此外,我刚刚部署到我的沙盒环境..也是2008 R2,IIS 7.5.7600 ..一切正常。如果我必须进行远程调试,我宁愿对抗ANYTHING而是生产服务器。呃..我对你的想法持开放态度!


我正在将生产和沙盒IIS环境的服务器配置转储到XML using appcmd.exe,到目前为止,没有真正的重大差异..两者都使用了使用managedRuntimeVersion =“v4.0”定义的应用程序池,并且都没有他们的网站配置中任何类型的有意义的差异......

SANDBOX:

<location path="my.test.dataApp - 96">
    <system.webServer>
        <security>
            <authentication>
                <anonymousAuthentication enabled="false" />
                <windowsAuthentication enabled="true">
                    <providers>
                        <clear />
                        <add value="NTLM" />
                        <add value="Negotiate" />
                    </providers>
                </windowsAuthentication>
            </authentication>
        </security>
    </system.webServer>
</location>

PRODUCTION:

<location path="wq.ross.local">
    <system.webServer>
        <security>
            <authentication>
                <anonymousAuthentication enabled="false" />
                <basicAuthentication enabled="false" />
                <windowsAuthentication enabled="true">
                    <providers>
                        <clear />
                        <add value="NTLM" />
                        <add value="Negotiate" />
                    </providers>
                </windowsAuthentication>
            </authentication>
        </security>
    </system.webServer>
</location>

这个问题还有更多令人费解的皱纹: 问题似乎只出现在一个特定的DataSet上..如果我导航到我的应用程序上的另一个“查看器”(即,如果我将一个不同的参数传递给同一控制器操作),则加载一个测试System.Data.DataSet,如果我点击连接到相同类型的'action'.NET类的按钮..它 有效地更新所选的System.Data.DataRow ..所以,对于这个特定的测试 DataSet - 在DEV,SANDBOX或PRODUCTION上没有问题..但对于我的其他DataSet - 它只适用于DEV和SANDBOX,但不适用于PRODUCTION(所有三种环境当前都是从同一生产数据库源加载它们的DataSet )

1 个答案:

答案 0 :(得分:0)

截至今天,仍然没有真正解决实际导致我的问题的答案。我从来没有明确地弄清楚导致我的特定DataSet操作在一个特定的'PRODUCTION'Windows 2008 R2实例上失败的技术问题,而在同一个DataSet上工作的相同应用程序代码在我的'SANDBOX'上无错误地工作Windows 2008 R2的实例。

但是,我发布了我的最终调查结果和解决方法。

在我的OP中,我详细描述了我的DataSet查看器MVC / WebAPI解决方案如何在我的本地工作站和我的SANDBOX 2008 R2上按预期工作,但在我的PRODUCTION 2008中始终失败(但仅在特定DataSet上) R2服务器。

从那篇文章开始,我发现了我的SANDBOX和PRODUCTION环境之间的一个区别。 SANDBOX安装了.NET Framework 4.5.x,而PRODUCTION只运行.NET Framework 4。

当时,这是一个MVC 4解决方案 - 所以 - 我不相信安装4.5甚至是一个要求。但是,无论出于何种原因,我的MVC 4解决方案在安装了4.5框架的服务器(和本地工作站)上运行得更好。所以...给我..解决方案很简单:

我的解决方案是让我的网络管理员配置新的2008 R2服务器。我构建了IIS并将.NET Framework升级到4.5.5(并在我使用的时候将我的解决方案升级到MVC5 / WebApi2) - 现在一切正常。