1

我目前正在尝试将我一直在开发的 MVC 3 应用程序部署到我们的测试 Web 服务器,并且在正确加载所有内容时遇到了一个主要问题。为了尝试提供尽可能多的信息,我正在执行 bin 部署(我已将所有引用发送到本地复制),并且正在通过文件系统在 web 项目上进行基本发布到应用程序目录服务器。我正在使用的组件是:

实体框架 4.3.1 Oracle ODAC 11.2.0(版本 4.112.3.0)

此应用程序有 2 个实体框架对象,一个用于 SQL Server 数据库,另一个用于 Oracle 10g 数据库。我相信问题在于实体框架对象进入 Oracle 数据库。这是我的第一个 MVC 3 项目和我的第一个部署(这里有很多“新”变量),所以我不确定我是否遗漏了任何东西。我该如何解决这个问题?在我的本地机器上一切正常,只有当我将项目部署到服务器时,我才会遇到问题。

到目前为止我尝试过的事情:

我所有的控制器都继承自一个基本控制器(BaseController),实体框架对象的实例就在其中。我无法访问从 BaseController 继承的任何控制器的 Index 视图,但 HomeController 从 Controller 继承。此页面工作正常。我已经尝试从其他控制器中继承,这使我可以进入索引视图,但是回到 BaseController 会再次导致堆栈跟踪中的错误。该错误似乎发生在我声明我的实体框架对象进入 oracle 数据库的那一行:

protected internal RadixWebDataPRDX dbRadixData = new RadixWebDataPRDX();

我复制了 Oracle.DataAccess.dll,这仍然会导致问题。

我的这个错误的堆栈跟踪如下,谢谢:

“/RadixMVC”应用程序中的服务器错误。

找不到请求的 .Net Framework 数据提供程序。它可能没有安装。

说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.ArgumentException:找不到请求的 .Net Framework 数据提供程序。它可能没有安装。

源错误:

在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。

堆栈跟踪:

[ArgumentException: Unable to find the requested .Net Framework Data Provider.  It may not be installed.]
   System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName) +1420503
   System.Data.EntityClient.EntityConnection.GetFactory(String providerString) +34

[ArgumentException: The specified store provider cannot be found in the configuration, or is not valid.]
   System.Data.EntityClient.EntityConnection.GetFactory(String providerString) +63
   System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString) +483
   System.Data.EntityClient.EntityConnection..ctor(String connectionString) +77
   System.Data.Objects.ObjectContext.CreateEntityConnection(String connectionString) +40
   System.Data.Objects.ObjectContext..ctor(String connectionString, String defaultContainerName) +17
   RadixMVC.Models.Data.RadixWebDataPRDX..ctor() in C:\Users\862599\Documents\Visual Studio 2010\Projects\RadixMVC\RadixMVC\RadixMVC.Models.Data\RadixDataPRDX.Designer.cs:34
   RadixMVC.Controllers.BaseController..ctor() in C:\Users\862599\Documents\Visual Studio 2010\Projects\RadixMVC\RadixMVC\RadixMVC\Controllers\BaseController.cs:17
   RadixMVC.Controllers.AccountsPayableController..ctor() +29

[TargetInvocationException: Exception has been thrown by the target of an invocation.]
   System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0
   System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache) +98
   System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache) +241
   System.Activator.CreateInstance(Type type, Boolean nonPublic) +69
   System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +67

[InvalidOperationException: An error occurred when trying to create a controller of type 'RadixMVC.Controllers.AccountsPayableController'. Make sure that the controller has a parameterless public constructor.]
   System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +181
   System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +77
   System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +66
   System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +209
   System.Web.Mvc.<>c__DisplayClass6.<BeginProcessRequest>b__2() +50
   System.Web.Mvc.<>c__DisplayClassb`1.<ProcessInApplicationTrust>b__a() +13
   System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7
   System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +23
   System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Func`1 func) +124
   System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +98
   System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +48
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +16
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8970356
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184

版本信息:Microsoft .NET Framework 版本:4.0.30319;ASP.NET 版本:4.0.30319.272

4

1 回答 1

1

Bob 说的是解决这个问题的方法。ODAC 组件也必须安装在服务器上(我不知道这一点)。谢谢鲍勃!

于 2012-07-19T13:30:07.427 回答