我们将其部署在已经安装并配置了另一个asp.net应用程序的现有服务器上。这不是我们通常要做的,因为我们在新服务器上进行设置并配置所有内容。我们也有同样的ASP.NET应用程序在其他几台服务器上运行,没有问题。
该应用程序是在ASP.NET 4上运行的MVC3
该应用使用控制器创建简单的RPC类型的API。
示例:(发送)/ Services / LMS / GetCourses(返回)XML文档
一旦我们部署了asp.net应用程序并在IIS中进行了所有设置,我们就会遇到一个以前从未见过的问题。
应用程序将在下面的行中发送NullReferenceException。
DbProviderFactories.GetFactory(ConfigurationManager.ConnectionStrings["LMS"].ProviderName);
但仅当http请求是POST时。如果我们发送GET请求,则该请求有效。
我猜这是一些配置冲突。配置文件中是否有某些内容可能会限制我们的应用程序读取POST上的Web.config设置?
要基于评论提供更多背景信息:
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Configuration;
using Services.Models;
public class DBConnection
{
protected DbProviderFactory factory;
protected string connectionString;
protected char paramChar; // could be ':' or '@' depending on database
public DBConnection(string db) // db is equal to "LMS"
{
try
{
factory = DbProviderFactories.GetFactory(ConfigurationManager.ConnectionStrings[db].ProviderName); // the exception stack points to this line having NullReferenceException
connectionString = ConfigurationManager.ConnectionStrings[db].ConnectionString;
paramChar = DbUtil.GetParamChar(ConfigurationManager.ConnectionStrings[db].ProviderName);
}
catch (ConfigurationErrorsException)
{
throw new ConfigurationErrorsException("The database " + db + " has not been defined in the web.config file.");
}
}
}