2014-01-15 53 views
0

不同的我已经在我的web.config文件获取web.config中指定ODP.net的版本,这是从已安装的版本

<DbProviderFactories> 
     <remove invariant ="Oracle.DataAccess.Client" /> 
     <add name="ODP.NET, Unmanaged Driver" 
      invariant="Oracle.DataAccess.Client" 
      description="Oracle Data Provider for .NET, Unmanaged Driver" 
      type="Oracle.DataAccess.Client.OracleClientFactory, 
      Oracle.DataAccess, Version=4.121.1.0, Culture=neutral, 
      PublicKeyToken=89b483f429c47342" /> 
    </DbProviderFactories> 

我的开发机器使用OPD.net版本4.121.1.0,我以下已经添加了对该文件的引用并指定它应该在本地复制。我的部署服务器有一个较旧的客户端10.2.0.100,位于D:\ oracle \ product \ 10.2.0 \ db_1 \ BIN中。由于此应用程序将部署到多个服务器配置,因此我不想管理每个服务器的Oracle客户端。我认为,通过增加

<remove invariant ="Oracle.DataAccess.Client" />

我会删除与其他版本的任何冲突,除了我得到...

The type initializer for 'Oracle.DataAccess.Client.OracleConnection' threw an exception 

看完后,似乎有可能能够只使用在我的web.config的上面几行,并指定我想使用哪个版本的ODP.net,但它不适用于我。我正在寻找可能,这是做这件事的正确方法吗?

谢谢。任何帮助是极大的赞赏。

回答

1

“非托管”提供程序由两部分组成:有管理的驱动程序 - Oracle.DataAccess.dll和非托管客户端(通常称为“Oracle Home”)。虽然我猜想可能会有一些不匹配,但您要求11g驱动程序与10g客户端进行通信,而我认为10g甚至不支持.net 4.0(这是您加载的驱动程序)。如果您想使用.net 4.0和非托管提供程序,您可能别无选择,只能更新您的服务器。

也就是说,如果服务器依赖性是一个问题,我只会使用managed provider。非托管提供商是一个由几十年前无人管理的dll(Oracle客户端)管理的.net程序集的大杂烩。受管理的提供者是全新的,从头开始的界面,最终放弃了对客户端的旧依赖关系,真正让您只需放入几个DLL即可运行。

+0

谢谢b_levitt。链接中的视频以及您的摘要最有用。我发现在bin目录中包含tnsnames.ora文件并不够,但我需要创建一个tnsnames.ora-less配置。即数据源=(描述=(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = myhost)(PORT = 1521)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = orcl))); User Id = oracle_user;密码= oracle_pwd;“作为我的连接字符串的一部分,目前我已经在两个不同的系统上进行了测试,并且两者都起作用 – Trebor

+1

非常感谢您的支持我在tnsnames上找到了有趣的小技巧: 注意:默认的ODAC GUI安装程序在machine.config文件中创建TNS_ADMIN属性,该属性将覆盖位于应用程序工作目录中的tnsnames.ora文件的使用情况,在继续执行此OBE之前,我们建议您在machine.config文件中注释掉该属性。 来自:http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/12c/r1/appdev/dotnet/Web_version_Fully_Managed_ODPnet_OBE/odpnetmngdrv.html –

+0

好像Oracle不够复杂,他们不得不添加另一个晦涩的“功能”。谢谢你的提醒。幸运的是,我只在我的开发机器上使用Easy Client,而不需要他们的GUI工具。 – Trebor

1

我不熟悉ODP.net或Oracle。我想你最终引用的是一个dll或者一堆dll文件。问题是你的代码从错误的位置获取引用,并且你想明确地指定它。我以前做过,和其他dll一样。这是dll通过安装程序导入GAC时的常见情况,它们是由visual studio自动发现的。

你没有描述你的Visual Studio解决方案结构,但我想问题在于你的参考。如果您的引用是正确的,则不必覆盖任何web.config设置。我会有这样的结构:

solution folder 
     ------> lib 
     ------> project1 
     ------> project2 

其中lib文件夹将包含所有我的dll不在.NET核心。然后,我会删除并添加所有项目引用以查看特定的文件夹dll。 This post可以指导你如何使用显式路径设置引用(在我的例子中是lib文件夹)。

希望我帮了忙!

+0

Pantelis,谢谢。这几乎就是发生了什么事情。但是,有问题的DLL与调用它的可执行文件一起放入/ bin目录。我只是试过你的解决方案,但结果相同。根据MSDN文章“如果您使用不在项目目录中的程序集,您可以在参考路径中指定其位置”。我只是指定“bin”而没有任何斜线。当我尝试运行该程序时,它声明“Oracle.DataAccess.Client.OracleConnection的类型初始值设定项”引发了一个异常“ – Trebor

相关问题