.net中的Windows服务无法解析tns服务名称

时间:2009-04-01 09:32:32

标签: .net oracle windows-services windows-server-2003

我已将应用程序的一个组件从Web服务移动到Windows服务。它完全从Web服务连接到oracle,但拒绝从Windows服务中查看Tns名称。我已经完全控制了ORAHOME dir到运行该服务的帐户。

我还使用runas regedit作为服务帐户检查了注册表的服务帐户权限,它可以看到HKLM \ SOFTWARE \ ORACLE \ HOME0详细信息和HKLM \ SOFTWARE \ ORACLE \ ALL_HOMES。所有ORACLE_HOME键都指向同一目录。

我可以作为服务帐户登录,并且可以毫无问题地删除sid'UAT':  

'OK (70 msec)'

我已将进程监视器附加到进程,并且服务帐户(最终在扫描大部分注册表之后)看到tnsnames.ora甚至读取它。

你在键盘后面咯咯笑吗?你能帮忙吗?

Cause: OracleException

Source: System.Data.OracleClient Message: ORA-12154: TNS:could not resolve service name at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) at System.Data.OracleClient.OracleConnection.Open()

5 个答案:

答案 0 :(得分:5)

首先,您可以更改连接字符串以展开tns条目:

Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.161.50.101)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=MOUAT)));Password=password;User Id=username;

然后你得到了真正的错误:

And got ‘ORA-06413: Connection not open.’

这是由于'Windows服务'路径中包含括号'(DEV)'或'(UAT)'

解答:展开连接字符串以排除TNS解析,然后确保调用应用程序的路径不包含括号'('或')'。

答案 1 :(得分:1)

尝试将windows环境变量TNS_ADMIN设置为tnsnames.ora文件所在的路径并重新启动服务。

答案 2 :(得分:1)

运行Process Monitor以查看它是否正在加载TNSNAMES.ORA文件。我怀疑它是,但你的名字解析被打破了那个用户。

如果您可以使用服务帐户以交互方式登录,请尝试使用tnsping查看是否可以连接到该名称。

Oracle按此顺序解析文件(根据Metalink文章114085.1):

  1. 当前工作目录中的Oracle Net文件
  2. TNS_ADMIN定义为用户/会话环境变量
  3. TNS_ADMIN被定义为全局环境变量
  4. 注册表中定义的TNS_ADMIN
  5. %ORACLE_HOME%\ network \ admin(Oracle默认位置)中的Oracle Net文件
  6. 查看使用Process Monitor读取的内容(如果有)。

答案 3 :(得分:0)

检查服务是否可以通过告诉oracle访问tnsnames.ora文件所在的注册表项。从内存中,它是HKLM \ SOFTWARE \ ORACLE \ Key_Client,带有TNS_NAMES注册表字符串,该字符串是包含tnsnames.ora文件的文件夹。您也可以在HKCU树中创建相同的东西。

哎呀!现在我在工作,我可以看到字符串名称应为TNS_ADMIN。同时尝试使用env变量TNS_ADMIN并确保HKCU中没有任何内容。

同样注意到,您需要与tnsnames.ora相同的文件夹中的sqlnet.ora文件

答案 4 :(得分:0)

首先检查您的操作系统是32位还是64位。如果它是64位然后安装oracle express edition 64bit那么它将不会产生任何错误并成功运行....

访问http://behindfutureworld.weebly.com了解更多细节.....