解决Windows 2008 Server 64位,.NET访问Oracle问题
2014-04-25 15:12
393 查看
解决Windows 2008 Server 64位,.NET访问Oracle问题
在解决标题问题前,先说下Windows 2008 Server 部署MVC4 API的过程吧,也当方便还在纠结中的小伙伴们,尽量少走弯路。
1. 如果服务器上IIS还没有安装,在角色管理里添加Web服务器(IIS)。【添加角色】功能中完成。网上有直接答案,这里不再赘述。
2. 安装.NET 4.5环境。
3. 确认IIS完成安装后,进入Internet信息服务(IIS)管理器,选择IIS的根目录,在【功能视图】中找到【ISAPI和CGI限制】,取消安装的.NET版本的限制。
4. 接下来在发布Web API服务器前,先创建应用 程序池。在创建的时候,注意选择.NET的版本,选择你需要的安装版本。
5. 开始部署API应用程序或者网站。注意,笔者就遇到实现默认的80端口被占用的问题,导致默认网站下部署API出现问题,最后单独部署成网站,解决问题。
6. 最后,可以浏览测试了。由于各自的环境不一样,如果遇到HTTP错误,可以根据错误号找到对应的解决办法。
接下来,我们再说说解决.NET应用程序在64位下访问Oracle的问题吧。以下内容来自网上,在这里汇总贴出来,供大家参考。
以下所有的说明都是基于Windows64位的(以Windows2008为例)
下载页面:
http://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-win64soft-094461.html
下载地址:
http://download.oracle.com/otn/nt/oracle11g/112010/win64_11gR2_client.zip
已经下载到\\192.168.9.24\常用软件\Oracle\win64_11gR2_client.zip
然后正常安装,并进行数据库连接的配置,比如tnsnames.ora
2 将NetWorkService用户加入Administraotr组中,重启计算机(重要)
3 新建asp.net网站,配置程序的调试模式为使用IIS,不要使用WebServer,这样就可以调试了
4 由于Webserver是32位的程序,因此如果要使用webserver进行调试,可以考虑安装32位的Oracle客户端(没有进行测试)。
注意:对于已经安装了32位Oracle客户端的情况,本次没有测试
启动IIS,发布.NET连接ORACLE的应用,测试,报"System.Data.OracleClient需要Oracle客户端软件8.1.7或更高版本"错误。解决:将ORACLE安装目录
为NetworkService用户赋读和执行权,并传递到所有子目录。
重启动IIS,报“尝试加载 Oracle客户端库时引发BadImageFormatException。如果在安装32位
Oracle客户端组件的情况下以64位模式运行,将出现此问题。”解决:下
载并解压instantclient_11_2的X64版本,放到ORACLE安装目录下,并在PATH路径中搜索在前。
重启动IIS,报“ORA-12154:TNS:could not resolve the connect identifier specified”错误。解决:指定环境变量TNS_ADMIN到tnsnames.ora所在目录。
重启动IIS,.NET应用连接数据库服务器成功。
遇到的一个问题就是一个同事换了一个电脑,用的是X64的Windows2008作为操作系统,要进行Oracle的数据库连接,所以也装了64位的Oracle客户端。如果是控制应
用项目或者WinForm项目可以正常连接Oracle,但是Web项目在程序中打开Oracle连接时,系统抛出了异常:
尝试加载 Oracle客户端库时引发BadImageFormatException。如果在安装32位
Oracle客户端组件的情况下以64位模式运行,将出现此问题。
显然,这个提示的不正确,因为我们装的就是64位的客户端,所以并不存在64位程序调用32位客户端的情况。难道是生成的程序是32位的,然后32位调用了64位的
客户端,于是我把程序属性中的生成平台改为X64,如图所示:
结果这样生成的WebService程序在调用时还是报同样的异常。这个问题困扰了我一天,其中想到的解决办法就是把64位的客户端卸载了,在X64的操作系统中安
装32位的客户端,然后这样就可以了,但是如果不是Web应用(比如控制台应用程序或者WinForm程序)却同样报错,那就需要将非Web应用的项目按照上图的设置方
法,将生成的平台改为X86才能正常运行。
解决办法:
这当然是一个折中的办法,今天终于发现了真正的原因,原来VS在建Web项目时,平时运行使用的是自带的WebDev.WebServier是一个32位的服务,所以在其中运
行的Web项目不管怎么设置平台,都只能作为32位的应用来看待,所以在Web项目运行时连接64位的Oracle客户端会报错,而非Web项目就不会。
网上搜了一下,好像WeDev服务好像没有64位的,所以要解决这个问题,那么就不要使用这个服务作为Web服务,而使用IIS,因为IIS使用的是w3wp,在64位的操作系
统中是64位的,所以可以正常使用64位的Oracle客户端。具体设置如下:
这样设置后,每次运行就好以IIS来运行,不管是Web项目还是控制台应用项目或者WinForm项目,都会正常连接Oracle了。
数据连接不成功,请检查该数据库是否已启动尝试加载oracle客户端时引发BadImageFormatException.如果在安装32位Oracle客户端组件的情况下以64位模式运行,
将出现此问题
TheProblem in english is :
"Attempt to load Oracle client libraries threw BadImageFormatException.This problem will occur when running in 64 bit mode with the 32 bit Oracleclient components installed"
具体环境是:
win200864
vs 2010
开发调试过程中都没有问题,一部署这个问题就来了。
然后经过一大堆改动,改装64位Client之后的结果是:
IIS测试都没有问题,一调试这个问题就来了。
最奇怪的是这两个错误都是同样的错误信息。
呵呵,两种情况都让我碰到了,那就一起解决了他
我搞了整整两天才解决,网上有是有相关资料,但是都不全。具体原因也不明了.下面我来全面的讲述一下。
VS编译器调试过程用的并不是IIS来发布而是用上面这个进程。我们可以看到,他明显是一个32位的。而IIS
7的进程w3wp是64 bit的。这就说明,如果我们在调
试,那么我们的程序就在模拟32位运行,部署之后,确是模拟64位运行,让我最不能理解的是为什么一个是模拟32位运行,一个是模拟64位运行,而给我们的异常信息
确实相同的呢?先不管这么多,至少现在这里我们可以得出一个结论:
如果你写的程序调试过程没有任何问题,那么你发布到64位IIS时就一定会有问题,反之则得到相反的结果。
解决方法如下:
情况一.调试过程没有任何问题,发布时出现问题
若调试没有任何问题,那么你肯定是使用32 bitoracle client了,而服务器的IIS是64
bit的,所以需要发布网站的话,必须安装64bit client
实际上,System.Data.OracleClient所指向的是PATH环境变量下的oci.dll。因此,我们只要让程序能够找到64位的oci.dll就可以了。方法如下:
1. 下载instantclient-basic-win-x86-64-11.1.0.7.0.zip,并解压,如C:\instantclient-basic-win-x86-64-11.1\instantclient_11_1(这个部分也是必须的,根据实际情况的不
同进行修改)。
2. 在系统的环境变量PATH中加入以上路径。
之后重启操作系统(这个是必须的,我弄了一下午没有搞好,结果重启一下马上就好了),程序会依照PATH路径寻找oci.dll,如果遇到32位的oci.dll会自动略过,找到64位
的oci.dll就能连接上数据库了。
情况二.调试过程出现问题,但是在IIS上测试没有问题
若IIS测试没有任何问题,那么你肯定使用的是64bit oracle client了,调试出错是因为调试的WebDev进程服务器是32bit的,为了模拟真实环境,你需要进行一些设置。
如果是这样的情况,那你就改VS的调试服务器吧,改成IIS就可以了。
到这里,我们可以下结论,Oracle给的异常信息对于第一种情况来说是正确的,对于第二种情况则是错误的,意思刚好相反!!!可能是做本地化人员的一个粗心错误。
解决完这个问题之后,我的custom oracle membership forsharepoint的测试开发也就搞定了。近期还会记录一篇文章讲述customoracle
membership for
sharepoint的开发总结。
5System.Data.OracleClient需要 Oracle客户端软件
在用VSTS2005/2008+Oracle9做环境连接Oracle时候,在VS开发服务器运行正常,但IIS服务器调试和部署会报错!
IIS服务器报错:System.Data.OracleClient需要 Oracle客户端软件
8.1.7 或更高版本。
出错的原因:
1.虽然报的是需要安装客户端8.1.7及以上版本,实际是.net账户没有访问Oracle\bin文件夹的权限
2.在Windows Server 2003/2008的NTFS系统中提供了高级的访问安全性,FAT32系统也许没有这个问题。
解决办法如下:
我用Windows Server 2008为例Windows Server 2003是一样的
1.打开安装有Oracle客户端的电脑,在安装目录C:\oracle\ora90\BIN文件夹上右键-》安全选项卡-》点击编辑---》添加。
2.点击“查找范围”,在下面显示的账户中选择“NTWORKSERVICE”
----将“读取和执行”的权限都赋给他(如果不行就把完全控制给他,这样不安全),
子文件夹继承此权限,确定。
3.打开“服务器管理器”-》配置-》本地用户和组-》组-》adminisgrators-》将NetworkService添加进来
4.重新启动IIS,在“运行”中输入“IISRESET”。
在解决标题问题前,先说下Windows 2008 Server 部署MVC4 API的过程吧,也当方便还在纠结中的小伙伴们,尽量少走弯路。
1. 如果服务器上IIS还没有安装,在角色管理里添加Web服务器(IIS)。【添加角色】功能中完成。网上有直接答案,这里不再赘述。
2. 安装.NET 4.5环境。
3. 确认IIS完成安装后,进入Internet信息服务(IIS)管理器,选择IIS的根目录,在【功能视图】中找到【ISAPI和CGI限制】,取消安装的.NET版本的限制。
4. 接下来在发布Web API服务器前,先创建应用 程序池。在创建的时候,注意选择.NET的版本,选择你需要的安装版本。
5. 开始部署API应用程序或者网站。注意,笔者就遇到实现默认的80端口被占用的问题,导致默认网站下部署API出现问题,最后单独部署成网站,解决问题。
6. 最后,可以浏览测试了。由于各自的环境不一样,如果遇到HTTP错误,可以根据错误号找到对应的解决办法。
接下来,我们再说说解决.NET应用程序在64位下访问Oracle的问题吧。以下内容来自网上,在这里汇总贴出来,供大家参考。
以下所有的说明都是基于Windows64位的(以Windows2008为例)
1解决方案(这是最终步骤,其他供参考)
1 安装Oracle64位客户端(win64_11gR2_client):下载页面:
http://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-win64soft-094461.html
下载地址:
http://download.oracle.com/otn/nt/oracle11g/112010/win64_11gR2_client.zip
已经下载到\\192.168.9.24\常用软件\Oracle\win64_11gR2_client.zip
然后正常安装,并进行数据库连接的配置,比如tnsnames.ora
2 将NetWorkService用户加入Administraotr组中,重启计算机(重要)
3 新建asp.net网站,配置程序的调试模式为使用IIS,不要使用WebServer,这样就可以调试了
4 由于Webserver是32位的程序,因此如果要使用webserver进行调试,可以考虑安装32位的Oracle客户端(没有进行测试)。
注意:对于已经安装了32位Oracle客户端的情况,本次没有测试
2安装顺序
安装Oracle11g Release 2 ODAC 11.2.0.1.2 with Oracle Developer Tools for Visual Studio,配置服务器tnsnames,使用SQLPLUS测试成功连接。启动IIS,发布.NET连接ORACLE的应用,测试,报"System.Data.OracleClient需要Oracle客户端软件8.1.7或更高版本"错误。解决:将ORACLE安装目录
为NetworkService用户赋读和执行权,并传递到所有子目录。
重启动IIS,报“尝试加载 Oracle客户端库时引发BadImageFormatException。如果在安装32位
Oracle客户端组件的情况下以64位模式运行,将出现此问题。”解决:下
载并解压instantclient_11_2的X64版本,放到ORACLE安装目录下,并在PATH路径中搜索在前。
重启动IIS,报“ORA-12154:TNS:could not resolve the connect identifier specified”错误。解决:指定环境变量TNS_ADMIN到tnsnames.ora所在目录。
重启动IIS,.NET应用连接数据库服务器成功。
3在asp.net中,不用使用Webdev进行调试,必须使用IIS调试
我们平时使用的都是32位的机器进行开发,装的都是32位的软件,但是我们的服务器一般都是64位的,所以有时也需要在64位的环境下装一个VS调试程序。最近遇到的一个问题就是一个同事换了一个电脑,用的是X64的Windows2008作为操作系统,要进行Oracle的数据库连接,所以也装了64位的Oracle客户端。如果是控制应
用项目或者WinForm项目可以正常连接Oracle,但是Web项目在程序中打开Oracle连接时,系统抛出了异常:
尝试加载 Oracle客户端库时引发BadImageFormatException。如果在安装32位
Oracle客户端组件的情况下以64位模式运行,将出现此问题。
显然,这个提示的不正确,因为我们装的就是64位的客户端,所以并不存在64位程序调用32位客户端的情况。难道是生成的程序是32位的,然后32位调用了64位的
客户端,于是我把程序属性中的生成平台改为X64,如图所示:
结果这样生成的WebService程序在调用时还是报同样的异常。这个问题困扰了我一天,其中想到的解决办法就是把64位的客户端卸载了,在X64的操作系统中安
装32位的客户端,然后这样就可以了,但是如果不是Web应用(比如控制台应用程序或者WinForm程序)却同样报错,那就需要将非Web应用的项目按照上图的设置方
法,将生成的平台改为X86才能正常运行。
解决办法:
这当然是一个折中的办法,今天终于发现了真正的原因,原来VS在建Web项目时,平时运行使用的是自带的WebDev.WebServier是一个32位的服务,所以在其中运
行的Web项目不管怎么设置平台,都只能作为32位的应用来看待,所以在Web项目运行时连接64位的Oracle客户端会报错,而非Web项目就不会。
网上搜了一下,好像WeDev服务好像没有64位的,所以要解决这个问题,那么就不要使用这个服务作为Web服务,而使用IIS,因为IIS使用的是w3wp,在64位的操作系
统中是64位的,所以可以正常使用64位的Oracle客户端。具体设置如下:
这样设置后,每次运行就好以IIS来运行,不管是Web项目还是控制台应用项目或者WinForm项目,都会正常连接Oracle了。
4使用VS开发基于Oracle程序的严重问题
基于Oracle开发时遇到数据连接不成功,请检查该数据库是否已启动尝试加载oracle客户端时引发BadImageFormatException.如果在安装32位Oracle客户端组件的情况下以64位模式运行,
将出现此问题
TheProblem in english is :
"Attempt to load Oracle client libraries threw BadImageFormatException.This problem will occur when running in 64 bit mode with the 32 bit Oracleclient components installed"
具体环境是:
win200864
vs 2010
开发调试过程中都没有问题,一部署这个问题就来了。
然后经过一大堆改动,改装64位Client之后的结果是:
IIS测试都没有问题,一调试这个问题就来了。
最奇怪的是这两个错误都是同样的错误信息。
呵呵,两种情况都让我碰到了,那就一起解决了他
我搞了整整两天才解决,网上有是有相关资料,但是都不全。具体原因也不明了.下面我来全面的讲述一下。
VS编译器调试过程用的并不是IIS来发布而是用上面这个进程。我们可以看到,他明显是一个32位的。而IIS
7的进程w3wp是64 bit的。这就说明,如果我们在调
试,那么我们的程序就在模拟32位运行,部署之后,确是模拟64位运行,让我最不能理解的是为什么一个是模拟32位运行,一个是模拟64位运行,而给我们的异常信息
确实相同的呢?先不管这么多,至少现在这里我们可以得出一个结论:
如果你写的程序调试过程没有任何问题,那么你发布到64位IIS时就一定会有问题,反之则得到相反的结果。
解决方法如下:
情况一.调试过程没有任何问题,发布时出现问题
若调试没有任何问题,那么你肯定是使用32 bitoracle client了,而服务器的IIS是64
bit的,所以需要发布网站的话,必须安装64bit client
实际上,System.Data.OracleClient所指向的是PATH环境变量下的oci.dll。因此,我们只要让程序能够找到64位的oci.dll就可以了。方法如下:
1. 下载instantclient-basic-win-x86-64-11.1.0.7.0.zip,并解压,如C:\instantclient-basic-win-x86-64-11.1\instantclient_11_1(这个部分也是必须的,根据实际情况的不
同进行修改)。
2. 在系统的环境变量PATH中加入以上路径。
之后重启操作系统(这个是必须的,我弄了一下午没有搞好,结果重启一下马上就好了),程序会依照PATH路径寻找oci.dll,如果遇到32位的oci.dll会自动略过,找到64位
的oci.dll就能连接上数据库了。
情况二.调试过程出现问题,但是在IIS上测试没有问题
若IIS测试没有任何问题,那么你肯定使用的是64bit oracle client了,调试出错是因为调试的WebDev进程服务器是32bit的,为了模拟真实环境,你需要进行一些设置。
如果是这样的情况,那你就改VS的调试服务器吧,改成IIS就可以了。
到这里,我们可以下结论,Oracle给的异常信息对于第一种情况来说是正确的,对于第二种情况则是错误的,意思刚好相反!!!可能是做本地化人员的一个粗心错误。
解决完这个问题之后,我的custom oracle membership forsharepoint的测试开发也就搞定了。近期还会记录一篇文章讲述customoracle
membership for
sharepoint的开发总结。
5System.Data.OracleClient需要 Oracle客户端软件
8.1.7或更高版本
在用VSTS2005/2008+Oracle9做环境连接Oracle时候,在VS开发服务器运行正常,但IIS服务器调试和部署会报错!IIS服务器报错:System.Data.OracleClient需要 Oracle客户端软件
8.1.7 或更高版本。
出错的原因:
1.虽然报的是需要安装客户端8.1.7及以上版本,实际是.net账户没有访问Oracle\bin文件夹的权限
2.在Windows Server 2003/2008的NTFS系统中提供了高级的访问安全性,FAT32系统也许没有这个问题。
解决办法如下:
我用Windows Server 2008为例Windows Server 2003是一样的
1.打开安装有Oracle客户端的电脑,在安装目录C:\oracle\ora90\BIN文件夹上右键-》安全选项卡-》点击编辑---》添加。
2.点击“查找范围”,在下面显示的账户中选择“NTWORKSERVICE”
----将“读取和执行”的权限都赋给他(如果不行就把完全控制给他,这样不安全),
子文件夹继承此权限,确定。
3.打开“服务器管理器”-》配置-》本地用户和组-》组-》adminisgrators-》将NetworkService添加进来
4.重新启动IIS,在“运行”中输入“IISRESET”。
相关文章推荐
- 免安装Oracle客户端使用PL/SQL(Server2008 R2 64位问题也可解决)
- Windows Storage Server 2008 R2 Standard(64位),Win7(64位)的PLSQL不能连接oracle的解决办法
- 在windows 2008 64位环境下,oracle连接 Badimage 问题的解决
- [远程] windows 2008 server设置了共享文件夹,并且共享给了everyone,但是还是无法访问,怎么解决呢?
- win7 64位系统 Oracle32bit + PL/SQL访问Orale服务,Oracle 11g的安装,中文乱码问题的解决
- windows 2008 64位oracle11g部署问题(4)之Environment variable ORACLE_UNQNAME not defined 推荐
- 在Windows64位环境下.net访问Oracle解决方案
- 用oralce连接.net客户端出现问题:“数据连接不成功,请检查该数据库是否已启动尝试加载oracle客户端时引发BadImageFormatException.如果在安装32位Oracle客户端组件的情况下以64位模式运行,”的解决办法
- 64位WINDOWS 使用PL SQL DEVELOPER 连接ORACLE 出错问题解决
- 解决IIS7.0部署文件在 windows 2008 R2 64位C盘中无法注册问题
- mac svn 访问 windows svn server 证书问题解决方法
- Windows 2008 Terminal Server Web Access的ActiveX问题解决方法
- Window Server 2008 R2 SP1(64位)下安装oracle遇到的一些问题及解决方案
- Windows_server_2008_IIS7.5设置https成功了_经验分享及常见问题解决方法!
- 64位winserver2008环境,ASP.Net程序不能访问Oracle数据库(安装的32位Oracle客户端)
- 在Windows2012-64位-安装oracle10的经验:成功解决“TNS-12546: TNS: 权限被拒绝 (permission denied)”问题
- mac svn 访问 windows svn server 证书问题解决方法
- 解决pptpd server 配置后还是无法访问外网问题
- windows 2008初体验常见问题: 无线网络"没有正确配置为使用IP协议" 错误解决办法
- 安装windows_server2008配置外网可以访问的数据库