我已经实现了一个Web服务,它使用附加到Oracle 11g数据库的Entity Framework来使用一些非常简单的linq查询。这在Visual Studio中可以在本地运行。当我将此Web服务部署到我们的开发盒时,它无法正常工作。首先我得到一个错误:
在配置中找不到指定的商店提供商,或者无效。
我做了一些研究并阅读了一些关于修改web.config(或machine.config)以获得此条目的帖子:
<system.data>
<DbProviderFactories>
<add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</DbProviderFactories>
我选择将它放在web.config中。在我这样做之后,我开始收到错误:
无法加载文件或程序集'Oracle.DataAccess,Version = 2.0.50727,Culture = neutral,PublicKeyToken = 89b483f429c47342'或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)
然后我决定在服务器上安装odp.net。之后我开始收到错误:
为system.data创建配置节处理程序时发生错误:列'InvariantName'被限制为唯一。值'Oracle.DataAccess.Client'已存在。 (D:\ Duke \ SmartGridWS \ web.config第107行)
这当然导致我检查machine.config,果然,odp.net安装在machine.config中输入相同的条目所以,现在我已经删除了重复的web.config条目,我只是得到这个错误:
底层提供程序在Open上失败。
这是我的web.config中的连接字符串条目:
<add name="Entities" connectionString="metadata=res://*/EDMS.csdl|res://*/EDMS.ssdl|res://*/EDMS.msl;provider=Oracle.DataAccess.Client;provider connection string="DATA SOURCE=EDMSPT01;PASSWORD=*redacted*;USER ID=*redacted*"" providerName="System.Data.EntityClient" />
在这里很难过。疯狂道具给巫师谁知道这里发生了什么。