我将mvc4应用程序发布到我的本地IIS,它在app_data文件夹中与我的SQL Server Express数据库一起正常工作。但是,当我将它发布到我在互联网上的FTP站点并运行它时,它会出错。它似乎没有连接到app_data文件夹中的数据库。我知道要在我的本地IIS上工作,我需要赋予它对网络服务的权限。我是否需要联系我的互联网托管以获得此文件夹的权限,或者我是否需要更改web.config连接字符串?
错误: 建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供程序:SQL网络接口,错误:26 - 查找指定的服务器/实例时出错)
答案 0 :(得分:0)
只要您的应用程序池帐户具有SQL Express权限,您就可以了。
您需要考虑以下几点:
我猜它正试图附加到user instance(see the ADO.NET reference here as well)。如果您不确定,请查看您的连接字符串是否包含
User Instance=true;AttachDBFilename=|DataDirectory|\InstanceDB.mdf
关于在asp.net中使用名为"Using SQL Server Express with ASP.NET"的SQL数据库有一篇很棒的MSDN文章,重复整个过程太长了。虽然它总体上讨论了使用它,但这些原则也适用于部署,并涵盖用户实例。
如果您正在使用用户实例,那么您还需要检查是否已安装SQL Server以允许它们。您可以通过运行sp_configure
来查看设置来执行此操作:
exec sp_configure 'user instances enabled'
如果它返回“1”,那么您启用了用户实例,如果没有,则exec sp_configure 'user instances enabled', '1'
将启用它们(并使用'0'
禁用它们。)
用户实例并不总是最佳选择,因此在执行此操作之前,请检查您是否不想使用普通实例。
IIS 7开始引入application pool identites。有时您需要授予他们访问sql server的权限:
IIS APPPOOL\MyAppPoolName
并创建用户(设置您需要的任何其他设置)
或者,您可以运行:
CREATE LOGIN [IIS APPPOOL\MyAppPoolName] FROM WINDOWS;
USE MyDatabase
GO
CREATE USER MyAppPoolUser FOR LOGIN [IIS APPPOOL\MyAppPoolName];
EXEC sp_addrolemember N'role_name', N'MyAppPoolUser' -- role name could be db_owner
应用程序池标识现在是最佳实践,应尽可能使用(有些情况不可行,例如多服务器设置)。
如果您看到错误“由于读取注册表项失败而无法生成SQL Server的用户实例。连接将被关闭”那么您也遇到IIS应用程序池问题身份和用户实例。解决这个问题:
还有一篇关于这些和用户实例的iis.net文章,名为"Application Pool Identities and SQL Server Express"(Thomas Demi)很有用。