
Estoy perplejo. Tengo un sitio de cliente en un servidor privado virtual: Windows Web Server 2008 SP2, IIS7, SQL Server 2008 Express.
Estoy intentando configurar una segunda aplicación web para permitirle revisar las actualizaciones antes de su publicación. Creé la aplicación web en IIS7 y agregué una segunda base de datos a SQL Server. La segunda base de datos es esencialmente una copia de la base de datos de producción, con el prefijo 'DEV' al nombre de la base de datos y algunos campos nuevos en algunas tablas.
Mi sitio de producción funciona bien. Sin embargo, el sitio de prueba vuelve con una excepción SqlException: "Nombre de columna no válido 'versión'". Este es uno de los campos nuevos, lo que me lleva a creer que mi sitio de desarrollo se refiere a la base de datos de producción y no a la base de datos de desarrollo. Las cadenas de conexión, sin embargo, apuntan a bases de datos diferentes (aunque el inicio de sesión es el mismo para ambas):
- Sitio de producción: "Servidor=.\SQLExpress;Base de datos=myDbName;ID de usuario=myUserName;Contraseña=myUserPassword;"
- Sitio de desarrollo: "Servidor=.\SQLExpress;Base de datos=DEVmyDbName;ID de usuario=myUserName;Contraseña=myUserPassword;"
Parece que esto debería ser algo obvio que me falta. Un colega me sugirió que creara otro grupo de aplicaciones para la segunda aplicación IIS, pero no parece haber ayudado.
ACTUALIZACIÓN, después de pruebas adicionales:
Cambié la cadena de conexión del sitio de desarrollo a
"Server=.\SQLExpress;Database=DEVmyDbName;User ID=devuser;Password=myNewDifferentPassword;"
y creó un nuevo inicio de sesión del servidor SQL en la base de datos, y solo le dio acceso a la base de datos de desarrollo. También configuré la base de datos de desarrollo como la base de datos predeterminada de la cuenta. Eliminé el acceso a la base de datos de desarrollo desde el inicio de sesión de producción. Cuando intento iniciar sesión en el sitio, aparece el siguiente error:
- La entidad principal del servidor "devuser" no puede acceder a la base de datos "myDbName" en el contexto de seguridad actual.
Como resultado, hay dos cosas que sé con certeza:
- Dado que utiliza el nuevo nombre de usuario para iniciar sesión, sé que la aplicación está utilizando la cadena de conexión que le estoy proporcionando;
- Por alguna razón, una vez que inicia sesión, parece ignorar la base de datos especificada e intentar utilizar la base de datos de producción.
Todavía perplejo.
Respuesta1
Después de investigar más, encontré al culpable: era un problema de la aplicación relacionado con la configuración de NHibernate. Una de las opciones de configuración de NHibernate que se configuró fue "default_schema"; cuando la eliminé, la aplicación comenzó a conectarse a la base de datos correcta.
Parece que la propiedad default_schema estaba anulando cualquier base de datos especificada en la cadena de conexión.
Respuesta2
Parece que tienes más de una cadena de conexión; ¿Es posible que haya uno almacenado en algún lugar de la aplicación?
Cree un nuevo ID de usuario/contraseña solo en el sistema de desarrollo, cambie la cadena de conexión de desarrollo para usarla; si se conecta, el problema está en otra parte.
Si tiene acceso a la versión completa de SQL, puede ejecutar Profiler en la instancia de SQLExpress y monitorear la actividad.