Azure Compute Emulator can't connect to database after Upgrading to SQL Server 2008 R2
直到上周,我使用 SQL Server 2008 non-R2 进行开发,并且我的 ASP.NET MVC Web 应用程序在 Azure Compute Emulator 中运行良好。它在运行时建立数据库连接。
在切换到 SQL Server 2008 R2(之前卸载了非 R2 版本)后,我的 Web 应用程序在 Compute Emulator 中运行时无法再连接到数据库。
有趣:当我在 Azure Compute Emulator 之外启动我的应用程序时,它可以工作!
例外:
System.Data.SqlClient.SqlException was unhandled by user code
Message=Cannot open database"X" requested by the login. The login failed.
Login failed for user 'NT AUTHORITY\
ETWORK SERVICE'.
有什么想法吗?谢谢!
我猜您的连接字符串带有"Integrated Security=True"(或 SSPI)。您的旧服务器已配置为用户"网络服务"对目标数据库的大访问权限,而您的新 R2 安装不是。
此外,当您在 Compute Emulator 下运行您的应用程序时,它使用 IIS 来运行您的 Web 角色,即默认的应用程序池标识(网络服务)。但是,当您在没有 Cloud Project(Compute Emulator)的情况下运行您的应用程序时,它使用 Casini(AKA Web 开发服务器),它在用于 Visual Studio 的帐户下运行(猜测您的用户帐户的升级版本)。而且因为您的用户帐户确实可以访问数据库,所以您的应用程序也有。
我强烈建议放弃任何"集成安全"连接字符串,并在开发面向云部署的 Windows Azure 应用程序时针对 SQL Server 用户使用。 SQL Azure 仅支持 SQL Server Authenticatin/Authorization。
我遇到了同样的问题,但是从 web.config 中的连接字符串中删除"Integrated Security=True"后,mvc-app 也无法连接,这一次是因为实体框架错误。
但幸运的是,这个解决方法终于解决了我的问题!