当我在.Net WCF Web服务中创建Oracle连接时,为什么会出现'System.TypeInitializationException'?

时间:2012-08-21 17:59:40

标签: .net wpf wcf oracle odac

我目前正致力于实现一个与后端的Oracle 10g数据库通信的WCF服务。当我尝试从我的服务中连接到数据库时,我收到以下异常:System.TypeInitializationException

  • 我在Windows 7(64位机器)上运行。
  • 我正在使用VS 2010。
  • 我在后端使用Oracle 10g。
  • 我是以下安装的Oracle.DataAccess.dll(ODP.Net) 实例

    c:\oracle\product\10.2.0\.....\ODP.NET\bin\1.x\Oracle.DataAccess.dll
    
  • 我已将此DLL包含在我的WCF服务的引用中。
  • 我已将此服务作为VS WPF解决方案中的项目包含在内。
  • 启动WPF应用程序时,服务会自动启动 在VS 2010中。

在运行时,我在调试输出窗口中看到以下输出:

  

'WcfSvcHost.exe'(管理(v4.0.30319)):已加载   'C:\ WINDOWS \装配\ GAC \ Oracle.DataAccess \ 1.102.2.20__89b483f429c47342 \ Oracle.DataAccess.dll'   “System.TypeInitializationException”类型的第一次机会异常   发生在Oracle.DataAccess.dll

果然,我查看调试器中的异常详细信息,并看到以下信息(当我尝试创建新的ORACLE连接时会发生这种情况):

  

“'Oracle.DataAccess.Client.OracleConnection'的类型初始值设定项   引发异常。“InnerException {”提供程序不兼容   使用Oracle客户端版本“} System.Exception   {Oracle.DataAccess.Client.OracleException}

一点背景:

我基本上是将数据层迁移到WCF服务。以前存在于WinForm应用程序中的相同服务层。在我的WinForm应用程序中一切正常。我对Oracle.DataAccess.dll包含相同的引用,并且我对数据库的所有读/写工作正常。

WCF和WinForm访问/使用DLL之间是否存在明显不同? 我不知道有一些限制吗? 在调试器中通过VS2010运行这个问题吗?

我完全不知道这里发生了什么。任何提示/方向将不胜感激。

1 个答案:

答案 0 :(得分:1)

不,你需要注意.NET方面没什么特别之处 导致此特定错误的一些原因是:

  1. 您的应用程序面向.NET 4,但您只有ODP.NET for .NET 2或甚至安装了.NET 1
  2. 您正在使用本地Oracle Instant Client,并且缺少一些非托管DLL。

  3. 实际上,您的异常消息指出它尝试从版本号为1.102.2.20的GAC加载Oracle.DataAccess.dll。这似乎是ODP.NET的 .NET 1 版本,因为.NET 2的版本具有 2 .102.2.20的数字,而对于.NET 4,它具有数字 4 .102.2.20。

    也许你的Winforms应用程序在其bin文件夹中有一个版本的Oracle.DataAccess.dll,而是使用它而不是GAC中的那个?


    这些问题是我在项目中切换到本地Oracle Instant Client的原因。这为我的部署增加了130 MB,但这并不重要,因为它是所有企业软件。

相关问题