部署到 Web 服务器后 MVC Null 异常

Posted

技术标签:

【中文标题】部署到 Web 服务器后 MVC Null 异常【英文标题】:MVC Null exception after deploying to web server 【发布时间】:2012-01-09 18:13:45 【问题描述】:

我有一个 MVC 3 应用程序,在从 Visual Studio 本地运行时运行良好,

有两个 bat 文件预编译应用程序准备部署,当我运行 bat 文件并将部署文件夹上传到 Web 服务器时,会引发大量错误,包括空异常错误,

通过访问以下 URL 可以看到错误,如果需要,我还可以在文档上提供完整的堆栈跟踪,我不想在这里发布它,因为它太大了。

error can be seen here

我无法理解错误来自哪里,因为一切都在本地工作,似乎这些错误是在 bat 文件编译应用程序时创建的,有没有人在部署 MVC 应用程序后有类似的经历?任何人都可以就可能导致问题的原因提供任何建议吗?

谢谢

利亚姆

更新=============

这是 GetTax 方法,此代码已作为 NopCommerce 2.2 的一部分经过彻底测试,仅在通过 BAT 文件编译解决方案后才会出现错误,BAT 文件再次成为构建 nop commerce 2.2 应用程序的标准,对吗在运行 BAT 文件并编译代码以进行部署时,认为它一定是我的机器上的某些东西导致了这些问题?

public virtual decimal GetTaxRate(ProductVariant productVariant, int taxCategoryId, 
        Customer customer)
    
        //tax exempt
        if (IsTaxExempt(productVariant, customer))
        
            return decimal.Zero;
        

        //tax request
        var calculateTaxRequest = CreateCalculateTaxRequest(productVariant, taxCategoryId, customer);

        //make EU VAT exempt validation (the European Union Value Added Tax)
        if (_taxSettings.EuVatEnabled)
        
            if (IsVatExempt(calculateTaxRequest.Address, calculateTaxRequest.Customer))
            
                //return zero if VAT is not chargeable
                return decimal.Zero;
            
        

        //active tax provider
        var activeTaxProvider = LoadActiveTaxProvider();

        //get tax rate
        var calculateTaxResult = activeTaxProvider.GetTaxRate(calculateTaxRequest);
        if (calculateTaxResult.Success)
            return calculateTaxResult.TaxRate;
        else
            return decimal.Zero;
    

【问题讨论】:

第 240 行是哪一行?另外,就是我在调试部署问题时尝试的,你有没有尝试在IIS中回收应用程序池? 【参考方案1】:

堆栈跟踪表明它来自TaxService.cs 中的方法GetTaxRate。我猜这不是特定于 ASP.NET MVC 的任何东西,而是一个部署问题。可能是数据库权限或连接字符串。您必须检查该方法在做什么。

Nop.Services.Tax.TaxService.GetTaxRate(ProductVariant productVariant, Int32 taxCategoryId, Customer customer) in c:\Nop 2.2 Source\just4fashion2.2source\Libraries\Nop.Services\Tax\TaxService.cs:240

【讨论】:

【参考方案2】:

这可能与您的开发和生产环境之间的配置不匹配有关。

如果您查看堆栈跟踪的顶部,您会发现这可能与 MVC 无关,但与您的 TaxService 中的某些内容有关。

[NullReferenceException: Object reference not set to an instance of an object.]
Nop.Services.Tax.TaxService.GetTaxRate(ProductVariant productVariant, Int32 taxCategoryId, Customer customer) in c:\Nop 2.2 Source\just4fashion2.2source\Libraries\Nop.Services\Tax\TaxService.cs:240

您需要检查发生 Null 异常的元素。 检查事项:

productVariant 是否为空? 客户是否为空? 在此函数中是否有任何其他元素被访问,例如可能为空的存储库或工厂? 本地和生产之间是否有任何配置更改,例如连接字符串、日志记录或安全设置?

【讨论】:

您好,感谢您的建议,我很确定没有空值,空值不会在我的本地环境中产生相同的错误吗?我认为这一定是某种类型的配置错误,我检查了连接字符串并且可以与旧的预编译版本一起使用,所以我想可以排除 Null 值可能会出现在生产环境中,例如依赖注入(以及不同的配置)。我会添加 if ( == null ) 检查所有值并抛出更具描述性的错误消息,以便您知道要查找的内容 再次感谢,我试一试并发布结果。

以上是关于部署到 Web 服务器后 MVC Null 异常的主要内容,如果未能解决你的问题,请参考以下文章

关于Asp.net mvc的诡异问题

[Asp.net mvc]实体更新异常:存储区更新插入或删除语句影响到了意外的行数。实体在加载后可能被修改或删除。

将Maven的Web项目部署到windows的Tomcat里

仅在 IIS 部署后的 Asp.net Web api 异常:名为“HelpPage_Default”的路由已在路由集合中

将Web项目War包部署到Tomcat服务器基本步骤(完整版)

将 MVC 应用程序部署到服务器后,JQuery 文件 404(未找到)和 500(内部服务器错误)