我最近在IIS(LocalDB)上部署了我的网站。但每当我尝试运行网站时,SQL都无法连接。我现在已经浏览了数百个帖子/文章,但我无法解决它。
错误
发生与网络相关或特定于实例的错误 建立与SQL Server的连接。找不到服务器或 无法访问。验证实例名称是否正确 SQL Server配置为允许远程连接。 (提供者:SQL 网络接口,错误:50 - 发生本地数据库运行时错误。 无法创建自动实例。请参阅Windows应用程序事件 记录错误详细信息。 )
Windows应用程序事件日志
Windows API调用SHGetKnownFolderPath返回错误代码:5。Windows 系统错误消息是:访问被拒绝。在线报道:422。
第二次登录 -
无法获取本地应用程序数据路径。最有可能是用户个人资料 没有加载。如果在IIS下执行LocalDB,请确保 为当前用户启用了配置文件加载。
我的连接字符串(同时尝试过) -
<appSettings>
<add key="ConnectionString" value="Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog=test;Integrated Security=True" />
<!--<add key="ConnectionString" value="data source=(LocalDB)\MSSQLLocalDB;UID=SOME_USERNAME;PWD=SOME_PASSWORD;initial catalog=test;connection timeout=30"/>-->
</appSettings>
我尝试编辑applicationHost.config。
Load User Profile对我来说已经是真的了
我的ApplicationHost.config文件
<applicationPools>
<add name="Classic .NET AppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Classic" />
<add name=".NET v2.0 Classic" managedRuntimeVersion="v2.0" managedPipelineMode="Classic" />
<add name=".NET v2.0" managedRuntimeVersion="v2.0" />
<add name=".NET v4.5 Classic" managedRuntimeVersion="v4.0" managedPipelineMode="Classic" />
<add name=".NET v4.5" managedRuntimeVersion="v4.0" />
<add name="ASP.NET v4.0" managedRuntimeVersion="v4.0">
<add name="DefaultAppPool" autoStart="true" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated">
<processModel identityType="ApplicationPoolIdentity" loadUserProfile="true" setProfileEnvironment="true" />
</add>
</applicationPools>
DefaultApplicationPool -
编辑 -
使用
添加IIS Apppoolicacls c:\inetpub\wwwroot /grant "IIS APPPOOL\DefaultAppPool":(OI)(CI)(RX)
仍然无法连接。
感谢任何帮助。
我使用Visual Studio 2015和SQL Server 2016在Windows 10上。
答案 0 :(得分:3)
有同样的问题。不过,我没有尝试过你所做的所有事情。我做了以下事情:
.NET v4.5
)Identity
ApplicationPoolIdentity
改为(对我来说是LocalSystem
)af.database.list(path, { query: { orderByChild: 'labels/' + label, equalTo: true } });
。答案 1 :(得分:0)
我可以看到两个可能的错误。
假设您的SQL服务器与IIS位于同一个框中,并假设您的ConnectionString建议使用命名实例“MSSQLLocalDB”安装SQL Server,您的连接字符串应为:
Data Source=localhost\MSSQLLocalDB;Initial Catalog=test;IntegratedSecurity=True"
如果LocalDB在另一台机器上,请不要使用主机名(除非你有DNS服务器),只需使用IP地址。
现在,鉴于您的应用程序正在使用APPPOOL \ DefaultAppPool,请确保授予此用户权限以执行您打算在SQL中执行的任何操作(例如,如果执行存储过程)。您必须将其添加为登录名,然后将其授予对数据库的EXECUTE,SELECT,INSERT,DELETE权限。
数据源必须始终为/
我建议您连接SSMS并确认主机名。我不希望“(或”)“出现在那里。除非你只是指你的(LocalDB),它可能是192.168.0.1等等。
答案 2 :(得分:0)
虽然有一些解决方法可以尝试(在您的帐户下运行SQL Server或共享LocalDB实例并使用新创建的共享地址连接到它),我认为这里最好的解决方案是升级到SQL Server Express 2012是我最终做的。
此博客条目中概述了详细说明: https://blogs.msdn.microsoft.com/sqlexpress/2011/12/08/using-localdb-with-full-iis-part-2-instance-ownership/
我浪费了将近一天的时间来确定原因和解决方法并得出结论,如果我升级SQL Server版本,它可能是最简单和最具前途的证据,因为LocalDB看起来似乎不是设计用于IIS或类似的阅读博客后的环境。
答案 3 :(得分:0)
我有完全相同的问题,最后我解决了。希望它也适合你。 我的问题是我使用Visual Studio 2017创建了一个Web应用程序,默认情况下托管在 IIS Express 上。然后我改为 IIS 然后我收到了这个错误。
在事件日志中,我看到了这两个错误:
Windows API调用SHGetKnownFolderPath返回错误代码:5。Windows系统错误消息为:访问被拒绝。
无法获取本地应用程序数据路径。很可能没有加载用户配置文件。如果在IIS下执行LocalDB,请确保为当前用户启用了配置文件加载。
对我而言,解决方案是:
首先,我使用SQL Server Management Studio附加了数据库,并登录到(LocalDB)\ MSSQLLocalDB,我在web.config连接字符串中找到了该文件。
<connectionStrings>
<add name="EFWeatherDBEntities"
connectionString="metadata=res://*/Models.EFModel.csdl|res://*/Models.EFModel.ssdl|res://*/Models.EFModel.msl;provider=System.Data.SqlClient;
provider connection string="
data source=(LocalDB)\MSSQLLocalDB;
attachdbfilename=|DataDirectory|\WeatherDB.mdf;
integrated security=True;connect timeout=30;
MultipleActiveResultSets=True;App=EntityFramework""
providerName="System.Data.EntityClient" />
</connectionStrings>
然后我在IIS中尝试点击Test Settings
中的Basic Settings
时,我收到了无效的应用程序路径错误消息。
所以我将凭证更改为另一个用户(我的用户是管理员,但我相信没有管理员权限,它也可以正常工作)。
基本上是这样的:
点击IIS中的网站
点击右侧面板上的Basic Settings
点击Connect As
并在Specific User
部分
然后点击Test Settings
检查您是否仍然出现路径错误。
然后在Application Pool
设置Identity to LocalSystem
答案 4 :(得分:0)
检查您的SQL Server连接字符串并在“项目属性”中启用SQL Server调试