我已经实现了一个 Web 服务,它使用附加到 Oracle 11g 数据库的实体框架使用一些极其简单的 linq 查询。这在视觉工作室中本地运行良好。当我将此 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 条目并且只是得到这个错误:
基础提供程序在打开时失败。
这是我的 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" />
在这里很困惑。巫师的疯狂道具知道这里发生了什么。