我目前正致力于实现一个与后端的Oracle 10g数据库通信的WCF服务。当我尝试从我的服务中连接到数据库时,我收到以下异常:System.TypeInitializationException
。
我是以下安装的Oracle.DataAccess.dll(ODP.Net) 实例
c:\oracle\product\10.2.0\.....\ODP.NET\bin\1.x\Oracle.DataAccess.dll
在运行时,我在调试输出窗口中看到以下输出:
'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运行这个问题吗?
我完全不知道这里发生了什么。任何提示/方向将不胜感激。
答案 0 :(得分:1)
不,你需要注意.NET方面没什么特别之处 导致此特定错误的一些原因是:
实际上,您的异常消息指出它尝试从版本号为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,但这并不重要,因为它是所有企业软件。