先说一下环境,Windows 2008 X64+Oracle 11g+IIS6
然后再IIS上部署WCF服务,使用了“Oracle.DataAccess.dll”,WCF端其实相当于一个远程的OracleHelper,有三个方法:
[OperationContract]
int ExecuteNonQuery(CommandType cmdType, string cmdText, params OracleParameter[] commandParameters);
[OperationContract]
object ExecuteScalar(CommandType cmdType, string cmdText, params OracleParameter[] commandParameters);
[OperationContract]
DataTable ExecuteSet(CommandType cmdType, string cmdText, params OracleParameter[] commandParameters);
客户端不管调用上述任何一个方法,都会报这样的异常:
“Oracle.DataAccess.Client.OracleCommand”的类型初始值设定项引发异常。
经网上提示,在WCF的bin目录下复制了OraOps11w.dll,依然报错。
OraOps11w.dll 文件的匹配版本要跟Oracle.DataAccess.dl 版本相匹配。还包括其他的oci.dll等文件。
这些dll都需要拷贝到WCF下的bin目录下吗?
@我本猿类:
是的,要跟Oracle.DataAccess.dl 同级目录下。
@polk6:
我没有找到oraociei11.dll,还有你看看我这些dll的版本满足条件吗
@我本猿类:
OraOps11w.dll 的版本不对,要2.112.3.0 。你用的是32位的ODP.Net文件吧。邮箱有吗。我发你OraOps11w.dl 和 oraociei11.dll
@polk6: stone_eternity@163.com 谢谢
@我本猿类:
我把网盘的地址发你邮箱了,oraociei11.dll文件比较大
@polk6: 谢谢你!不过部署上之后报错误:ORA-12154: TNS:could not resolve the connect identifier specified。
我的环境是:Windows 2008 64位系统+Oracle 11g+IIS6,先安装的IIS6,后安装的Oracle 11g,之后就直接部署WCF的,是不是需要配置其他什么东西啊?
@我本猿类:
网上搜索是 连接Oracle的配置问题。我发给你C#的配置
string conn = @"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.3)(PORT=1521)))(CONNECT_DATA=(sid =orcl)));User Id=yl;Password=yl";
②如果用的是 tnsnames.ora 文件的连接方式
范例:
testdb = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 198.168.0.3)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) )
@polk6: 真的谢谢你了!我用第一种连接字符串可以查询数据了。而且我查看了一下服务器的tnsnames.ora文件,格式是正确的,不知道为什么没有通过,还有待研究。总之,真的谢谢你了。
@polk6: 如果一台机子上既装了Oracle服务端又装了客户端ODP.NET,这种情况下怎么使用精简版的客户端,我的报OracleCommand初始化错误
@我本猿类: ODP.NET 的特点就是不会用到Oracle的客户端,它自身文件oraociei11.dll 就替代了客户端的功能。如果想使用精简版的客户端,就要使用oraoledb.oracle的方式连接,但要安装 Oracle 数据访问组件。可参考文章:http://www.cnblogs.com/polk6/archive/2013/03/22/2976028.html