部署后SQL不会连接

Pir*_*e X 5 sql-server asp.net iis sql-server-2016

我最近在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>
Run Code Online (Sandbox Code Playgroud)

我尝试编辑applicationHost.config.
加载用户个人资料对我来说已经是真的

我的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>
Run Code Online (Sandbox Code Playgroud)

我的IIS经理 - 在此输入图像描述

DefaultApplicationPool -

在此输入图像描述

我的网络应用配置 -
在此输入图像描述

应用池权限
在此输入图像描述

编辑 -

使用添加IIS Apppool

icacls c:\inetpub\wwwroot /grant "IIS APPPOOL\DefaultAppPool":(OI)(CI)(RX)
Run Code Online (Sandbox Code Playgroud)

仍然无法连接.

任何帮助表示赞赏.

我使用Visual Studio 2015和SQL Server 2016在Windows 10上.

Rob*_*ron 5

遇到了同样的问题。不过,我并未尝试您所做的所有事情。我做了以下工作:

  1. IIS管理器
  2. 应用程序池
  3. 找到您的应用所属的池(对我来说是.NET v4.5
  4. 右键单击->高级设置
  5. 向下滚动到 Identity
  6. 从任何东西(对我来说ApplicationPoolIdentity,和您一样)更改为LocalSystem

  • 我遇到了完全相同的问题,这对我也有用! (2认同)

Vin*_*mir 0

我可以看到两个可能的错误。

假设您的 SQL 服务器与 IIS 位于同一机器上,并假设按照 ConnectionString 的建议,您使用命名实例“MSSQLLocalDB”安装了 SQL 服务器,您的连接字符串应为:

Data Source=localhost\MSSQLLocalDB;Initial Catalog=test;IntegratedSecurity=True"
Run Code Online (Sandbox Code Playgroud)

如果 LocalDB 在另一台计算机上,请不要使用主机名(除非您有 DNS 服务器),只需使用 IP 地址。

现在,假设您的应用程序正在使用 APPPOOL\DefaultAppPool,请务必授予此用户权限以执行您打算在 SQL 中执行的任何操作(例如,如果执行存储过程)。您必须将其添加为登录名,然后授予其对数据库的 EXECUTE、SELECT、INSERT、DELETE 权限。

数据源必须始终是 /

我建议您连接 SSMS 并确认主机名。我不希望“(”或“)”出现在那里。除非您只是指您的 (LocalDB),可能是 192.168.0.1 等。