Служба Windows в .net не может разрешить имя службы tns - PullRequest
3 голосов
/ 01 апреля 2009

Я переместил компонент нашего приложения из веб-службы в службу Windows. Он прекрасно подключается к oracle из веб-службы, но отказывается видеть имена Tns из службы Windows. Я дал полный контроль над ORAHOME dir учетной записи, под которой работает служба.

Я также проверил разрешение учетной записи службы для реестра, используя runas regedit в качестве учетной записи службы, и он может видеть подробности HKLM \ SOFTWARE \ ORACLE \ HOME0 и HKLM \ SOFTWARE \ ORACLE \ ALL_HOMES. Все ключи ORACLE_HOME указывают на один и тот же каталог.

Я могу войти в систему как сервисная учетная запись и TNSPing sid 'UAT' без проблем:

'OK (70 msec)'

Я подключил монитор процесса к процессу, и учетная запись службы (наконец, после сканирования большей части реестра) видит tnsnames.ora и даже читает его.

Вы смеетесь за своей клавиатурой? Вы можете помочь!

<code>Cause: OracleException</p>

<p>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 ]

5 голосов
/ 24 апреля 2009

Сначала вы можете изменить строку подключения, чтобы расширить запись 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 голос
/ 02 апреля 2009

Попробуйте задать для переменной среды Windows TNS_ADMIN путь к файлу tnsnames.ora и перезапустить службу.

1 голос
/ 02 апреля 2009

Запустите Process Monitor, чтобы увидеть, загружает ли он файл TNSNAMES.ORA. Я подозреваю, что это так, но разрешение вашего имени нарушено от имени этого пользователя.

Если вы можете войти в систему с учетной записью службы в интерактивном режиме, попробуйте использовать tnsping, чтобы проверить, можно ли подключиться к имени.

Oracle разрешает файлы в следующем порядке (согласно статье 114085.1 Metalink):

  1. Файлы Oracle Net в текущем рабочем каталоге
  2. TNS_ADMIN определен как переменная среды пользователя / сеанса
  3. TNS_ADMIN определен как глобальная переменная среды
  4. TNS_ADMIN, определенный в реестре
  5. Файлы Oracle Net в% ORACLE_HOME% \ network \ admin (расположение по умолчанию для Oracle)

Посмотрите, какие из них, если таковые имеются, читаются с помощью Process Monitor.

0 голосов
/ 20 июня 2012

Прежде всего, проверьте, является ли ваша операционная система 32-битной или 64-битной. Если это 64-битная версия, тогда установите 64-битную версию oracle express edition, тогда она не выдаст ошибку и не запустится успешно ....

Посетите http://behindfutureworld.weebly.com для более подробной информации .....

0 голосов
/ 01 апреля 2009

Убедитесь, что служба может получить доступ к записи реестра с помощью команды oracle, где находится файл tnsnames.ora. Из памяти это HKLM \ SOFTWARE \ ORACLE \ Key_Client со строкой реестра TNS_NAMES, которая является папкой, содержащей файл tnsnames.ora. Вы также можете создать то же самое в дереве HKCU.

Упс! теперь я на работе, я вижу, что имя строки должно быть TNS_ADMIN. Также попробуйте переменную env TNS_ADMIN и убедитесь, что в HKCU ничего нет.

Также замечено, что вам нужен файл sqlnet.ora в той же папке, что и tnsnames.ora

...