【问题标题】:Azure Compute Emulator can't connect to database after Upgrading to SQL Server 2008 R2升级到 SQL Server 2008 R2 后 Azure Compute Emulator 无法连接到数据库
【发布时间】:2011-11-14 08:44:32
【问题描述】:
直到上周,我使用 SQL Server 2008 非 R2 进行开发,并且我的 ASP.NET MVC Web 应用程序在 Azure Compute Emulator 中运行良好。它在运行时建立数据库连接。
切换到 SQL Server 2008 R2(之前卸载非 R2 版本)后,我的 Web 应用程序在 Compute Emulator 中运行时无法再连接到数据库。
有趣:当我在 Azure Compute Emulator 之外启动我的应用程序时,它可以工作!
例外:
System.Data.SqlClient.SqlException 未被用户代码处理
Message=无法打开登录请求的数据库“X”。登录失败。
用户“NT AUTHORITY\NETWORK SERVICE”登录失败。
有什么想法吗?谢谢!
【问题讨论】:
标签:
asp.net-mvc
sql-server-2008
azure
azure-web-roles
【解决方案1】:
我猜您的连接字符串带有“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。
【解决方案2】:
我遇到了同样的问题,但是在从 web.config 中的连接字符串中删除“Integrated Security=True”后,mvc-app 也无法连接,这一次是因为实体框架错误。
但幸运的是this workaround 终于解决了我的问题!