关于asp.net mvc:Azure Compute Emulator can\\’t connect to database after Upgrade to SQL Server 2008 R2

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 也无法连接,这一次是因为实体框架错误。

但幸运的是,这个解决方法终于解决了我的问题!