这几天做一个Wcf service,发布win2008服务器上,其中wcf service调用了Oracle10的数据库,该数据库建在win2003服务器上.
因为win2008是64位操作系统,令我颇费了一番工夫。
我首先建好了wcf service,在本机上测试No problem, 发布到服务器上No problem 。
然后创建Demo调用wcf 的函数,不成功,提示"实例未创建";
仔细检查了好半天,原来是win2008上没有装Oracle客户端,
郁闷,居然犯这种低级错误!
找了两个11的客户端: win32_11gR1_client, win64_11gR2_client;
不用想, 当然是64bit,直接选择第二个,刷刷就装上了。
再运行Demo,以为这下该没问题了,正自得意,结果很受伤,又跳出来一大串错误信息:
This problem will occur when running in 64 bit mode with the 32 bit Oracle client components installed...
看上面的意思,难道是64bit win2008对32 bit的Oracle不能识别?
大概也许一定是吧,于是卸掉win64_11gR2_client,再装上win32_11gR1_client,再运行,
结果又现下面的错误:
System.Data.OracleClient requires Oracle client software version 8.1.7 or greater
8嘎,这都11g了,还要greater啊?用plsql logon 试试 也没问题呀!!!
没办法,只好求助于google了,还真有人遇到过,说是要将32bit和64bit的都装在win2008上,
并且在系统环境变量的path中配置了C:\oracle\product\11.1.0\client_1\BIN\oci.dll和C:\oracle\product\11.2.0\client_2\BIN\oci.dll
按照高人的指点,把两个版本都装上并检查确认环境变量没有问题了,抱着怀疑的心情再试了一下,仍然不成功,
这下错误信息又变成: ORA-12154: TNS:could not resolve the connect identifier specified,
无法解析,怎么会这样呢? 再用plsql连接,没问题
我用的连接串是:
connectionString="Data Source=mrpc;uid=mrpc;pwd=proto;" providerName="System.Data.OracleClient"
找了一个在VB6通过ODBC连接同一库的程序,在服务器上运行,也能成功!
由此想到应该是System.Data.OracleClient 这个东西搞的鬼,不管它了,干脆把连接串改成如下:
connectionString="Data Source=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = dn2prod111)(PORT = 1521)))(CONNECT_DATA =(SID = mest)));uid=mrpc;pwd=proto;" providerName="System.Data.OracleClient"
这下终于成功了。