4

我有一个 ASP.NET 应用程序,当它由 Visual Studio 开发服务器启动时,它可以连接到 Oracle,但是当我将它部署到我的本地 IIS 时,它没有连接,显示“ORA-12154:TNS:无法解析指定的连接标识符”错误。

我的连接字符串是:

Data Source=ABC; User Id=USER; Password=PASSWORD;

Tt 正在使用 TNS。我的 tnsnames.ora 位于 C:\oracle\instantclient_10_2\network\admin,而我的 ORACLE_HOME 系统变量指向 C:\oracle\instantclient_10_2。

为了使它工作,我将连接字符串更改为:

"SERVER=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = server1.theplaceiwork.com)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = server2.theplaceiwork.com)(PORT = 1521))(LOAD_BALANCE = yes))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = ABC)(FAILOVER_MODE =(TYPE = SELECT)(METHOD = BASIC))));uid=USER;pwd=PASSWORD;"

所以不再使用TNS。

但是我想知道为什么我可以在使用 Visual Studio 进行调试时使用 TNS 进行连接,但在使用 IIS 时却不能。

有小费吗?

PS。我可以将 SqlDeveloper 与 TNS 一起使用,显示没有连接错误。

谢谢

4

8 回答 8

6

确保网络服务可以访问您的 TNS 目录或将您的应用程序池更改为像您一样运行。

于 2011-08-24T17:33:47.133 回答
5

在这里找到答案:

授予对 IIS 7.5 ApplicationPoolIdentity 的访问权限

在 IIS 7.5 中使用“ApplicationPoolIdentity”时,相应的用户是(虚拟系统用户):

IIS AppPool\<AppPoolName>

您可以通过搜索此用户授予此用户权限并检查安全设置。在此处查看完整说明:

http://www.iis.net/learn/manage/configuring-security/application-pool-identities

所以基本上只是将 Oracle 文件夹的权限授予 App Pool 虚拟用户。

于 2014-04-07T07:23:19.813 回答
1

区别在于:

  • 当您在 Visual Studio 中进行调试时,您处于登录用户(您)的安全范围内
  • 当您在 IIS 中运行时,您处于应用程序池标识的安全上下文中。默认为网络服务。
于 2011-08-24T17:27:34.173 回答
1

就我而言,我使用 Windows 7、IIS 7、Visual Studio 2010。出于某种原因,我安装了2 个 Oracle 客户端10.2 和 11.2(我在两个不同的路径中有 2 个 TNSNAMES.ORA)。当我使用 F5 时,Visual Studio 使用一个 TNSNAME,而当我使用 IIS 时,它使用另一个 TNSNAME!

如果我使用 CMD 并编写:

tnsping ORCL

它给了我我使用的 Oracle 版本:10.2 而不是 11.2。我尝试关闭 Windows 防火墙但不起作用。我尝试使用我的 Windows 帐户登录 IIS->AppPool,但要么无法正常工作。

最后修复(2天后在stackoverflow和其他人中阅读了很多解决方案):

  • 我向所有人帐户用户授予对路径C:\oracle\productC:\app\user\product的读取权限,因为我没有找到网络服务帐户。

  • 在 IIS -> AppPool 中,我将ApplicationPoolIdentity设置为我的池。

  • 在 IIS 中,我回收 AppPool 并重新启动我的网站。

它有效!

于 2014-10-02T13:12:22.817 回答
1

正如@Jaanus 所述,我已将我的应用程序池配置为在 ApplicationPoolIdentity 的上下文中运行。

虚拟帐户“IIS AppPool\MyAppPoolName”已被授予对 Oracle 文件夹的读取和执行权限,但是,权限并未从该文件夹继承。我必须遍历 Oracle 文件夹结构以查看权限继承在何处停止并从该点显式启用它。

我使用SysInternals / Microsoft的Process Monitor发现了问题:

  1. 开始捕捉
  2. 运行访问 Oracle 资源的代码并等待 Visual Studio 引发异常。
  3. 停止捕捉。
  4. 筛选字符串“ACCESS DENIED”的结果字段。
于 2016-01-13T14:59:58.157 回答
0

发布我的案例,因为它花了很长时间才弄清楚。

我无权调整文件夹权限和设置应用程序池标识什么也没做。

最终不得不将单个站点的匿名身份验证凭据编辑为我自己的,并将应用程序池编辑为网络服务。希望有一天这会帮助处于同样令人沮丧的情况的人。

于 2015-10-09T18:11:40.477 回答
0

如果您使用的是 ApplicationPoolIdentity,请确保 ApplicationPoolIdentity 可以访问您的 TNS 目录。

请参阅此处如何授权: IIS7 权限概述 - ApplicationPoolIdentity

于 2016-03-22T12:50:22.507 回答
0

我遇到了这个问题并尝试了上面的所有方法,但没有成功。因此,再发布一件被忽视的可能是原因的事情。您的 sqlnet.ora 文件(与 tnsnames.ora 相同的目录)必须存在并且正确配置了 TNS:

#SQLNET.AUTHENTICATION_SERVICES = (NTS)
NAMES.DIRECTORY_PATH = (EZCONNECT,TNSNAMES)

EZCONNECT 是可选的,但在某些情况下它非常有用,所以我将它包括在内。

正是这最后一件事使我的应用程序能够正常工作。希望这可以帮助。

于 2017-06-16T16:12:09.163 回答