编辑: 我原来遗漏的一个重要细节(因为我不知道它很重要)是我们在完整的IIS中运行这些站点,而不是从IIS Express运行.
我们正在尝试为Kentico CMS设置本地开发环境,将我们的本地计算机添加到我们当前的Dev - > Staging - > Prod同步链中(所以我们最终会找到Locals - > Dev - > Staging - >产品).
我们将我们的Dev DB复制到本地机器上,然后复制到SQL Server的(localdb)\ v11.0实例上,但我们在除了我的计算机之外的所有计算机上都遇到了问题.
这是我们得到的错误:
应用程序无法连接到数据库,请检查web.config文件中的连接字符串和SQL Server可用性.
原始错误:
建立与SQL Server的连接时发生与网络相关或特定于实例的错误.服务器未找到或无法访问.验证实例名称是否正确,以及SQL Server是否配置为允许远程连接.(提供程序:SQL网络接口,错误:50 - 发生本地数据库运行时错误.指定的LocalDB实例不存在.)
我已经尝试了其他SO答案和其他网站的大量建议,以弄清楚为什么我们会收到这个错误(以及为什么它不会在我的机器上发生),但没有运气.我们可以在SSMS中连接到(localdb)\ v11.0但我们无法通过VS连接到它(相同的错误).此外,当我们打开Sql Server配置管理器时,我们没有看到任何SQL Server服务列表.有任何想法吗?
确保已安装.NET Framework 4.0.2+
将AppPool设置为在NetworkService帐户下运行.
在数据库中为该帐户创建登录.
USE [master];
CREATE LOGIN [NT AUTHORITY\NETWORK SERVICE] FROM WINDOWS;
EXEC sp_addsrvrolemember N'NT AUTHORITY\NETWORK SERVICE', SYSADMIN;
通过运行与所有用户共享您的实例
SqlLocalDB share Kentico KenticoShared
使用以下格式的连接字符串:
<add name="CMSConnectionString" connectionString="Data Source=(localdb)\.\KenticoShared;Initial Catalog=KenticoDB;Integrated Security=True;Connect Timeout=60" />
如果它没有帮助使用命名管道:
<add key="CMSConnectionString" value="Persist Security Info=False;Integrated Security=SSPI;database=KenticoDB;server=np:\\.\pipe\LOCALDB#D2BA6590\tsql\query;Current Language=English;Connection Timeout=120;" />
笔记:
可以通过运行以下C#来确定计算机上NetworkService帐户的确切名称
var ns = new SecurityIdentifier(WellKnownSidType.NetworkServiceSid, null).Translate(typeof(NTAccount)).ToString()
命名管道可以通过在CMD中运行来确定: SqlLocalDB info KenticoShared
别忘了运行你的实例 SqlLocalDB start KenticoShared