asp.net oracle iis tns

asp.net - Error Oracle ORA-12154 en IIS local, pero no con Visual Studio Development Server



tns (8)

Asegúrese de que el Servicio de red tenga acceso a sus directorios TNS o cambie su Pool de aplicaciones para que se ejecute como usted.

Tengo una aplicación ASP.NET que se puede conectar a Oracle cuando es iniciada por Visual Studio Development Server, pero cuando la despliego a mi IIS local, no se conecta, mostrando el "ORA-12154: TNS: no se pudo resolver el identificador de conexión especificó "error".

Mi cadena de conexión fue:

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

Tt está usando TNS. My tnsnames.ora se encuentra en C: / oracle / instantclient_10_2 / network / admin, y la variable del sistema ORACLE_HOME apunta a C: / oracle / instantclient_10_2.

Para que funcione, cambié la cadena de conexión a:

"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;"

Entonces TNS ya no se usa.

Pero me gustaría saber por qué me puedo conectar usando TNS mientras estoy depurando con Visual Studio, pero cuando uso IIS no puedo.

¿Algun consejo?

PD. Puedo usar SqlDeveloper con TNS que no muestra errores de conexión.

Gracias


En mi caso, uso Windows 7, IIS 7, Visual Studio 2010. Por alguna razón, he instalado 2 clientes de Oracle , 10.2 y 11.2 (tengo 2 TNSNAMES.ORA en dos rutas diferentes). Cuando uso F5, Visual Studio usa un TNSNAME y cuando uso IIS, ¡usa el otro TNSNAME!

Si uso CMD y escribo:

tnsping ORCL

Me da el vertion de Oracle que uso es: 10.2 y no 11.2. Intento apagar el Firewall de Windows y no funciona. Intento iniciar sesión en IIS-> AppPool con mi cuenta de Windows y o bien no funciona.

Finalmente para arreglar (después de 2 días leyendo muchas soluciones en y otros):

  • Doy acceso de lectura a la ruta de acceso C: / oracle / product y C: / app / user / product a todos los usuarios de la cuenta porque no encontré la cuenta de servicio de red .

  • En IIS -> AppPool, configuré ApplicationPoolIdentity en mi Pool.

  • En IIS, reciclo la AppPool y reinicio mi sitio web.

¡y funciona!


Había configurado mi grupo de aplicaciones para que se ejecutara en el contexto de ApplicationPoolIdentity como describe @Jaanus.

La cuenta virtual "IIS AppPool / MyAppPoolName" tenía permiso de lectura y ejecución en la carpeta Oracle, sin embargo, los permisos no se heredaban de esta carpeta. Tuve que recorrer la estructura de carpetas de Oracle para ver dónde se detenía la herencia de permisos y habilitarla explícitamente desde ese punto.

Encontré el problema usando Process Monitor de SysInternals / Microsoft:

  1. Comience a capturar
  2. Ejecute el código que accede a los recursos de Oracle y espere a que Visual Studio muestre la excepción.
  3. Deja de capturar
  4. Filtre el campo Resultado para la cadena "ACCESO DENEGADO".

La diferencia es:

  • Cuando está depurando en Visual Studio está en la seguridad del usuario conectado (usted)
  • Cuando se ejecuta en IIS, se encuentra en el contexto de seguridad de la identidad del grupo de aplicaciones. El valor predeterminado es Servicio de red.

Publicando mi caso porque tardó demasiado tiempo en descubrirlo.

No tuve acceso para ajustar los permisos de la carpeta y configurar la identidad del grupo de aplicaciones no hizo nada.

Terminé teniendo que editar las credenciales de Autenticación Anónima del sitio individual para el mío y el grupo de aplicaciones para el Servicio de Red. Esperemos que esto ayude a alguien en una situación similarmente frustrante algún día.


Respuesta encontrada aquí:

Concesión de acceso a IIS 7.5 ApplicationPoolIdentity

Al usar "ApplicationPoolIdentity" con IIS 7.5, el usuario correspondiente es (un usuario del sistema virtual):

IIS AppPool/<AppPoolName>

Puede otorgarle permisos a este usuario y verificar la configuración de seguridad buscando este usuario. Vea la explicación completa aquí:

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

Así que, básicamente, solo conceda permiso a la carpeta de Oracle para el usuario virtual del grupo de aplicaciones.



Tuve este problema e intenté todo lo anterior sin suerte. Así que publicar una cosa más que se pasó por alto que podría ser causa. Su archivo sqlnet.ora (el mismo directorio que tnsnames.ora) debe existir y tener TNS configurado correctamente:

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

EZCONNECT es opcional pero es muy útil en algunas situaciones, así que lo incluí.

Fue esto último lo que permitió que mi aplicación funcionara. Espero que esto ayude.