部署

时间:2016-07-18 16:36:37

标签: asp.net sql-server 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>

我尝试编辑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>

我的IIS管理员 - enter image description here

DefaultApplicationPool -

enter image description here

我的网络应用配置 -
enter image description here

应用程序池权限
enter image description here

编辑 -

使用

添加IIS Apppool
icacls c:\inetpub\wwwroot /grant "IIS APPPOOL\DefaultAppPool":(OI)(CI)(RX)

仍然无法连接。

感谢任何帮助。

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

5 个答案:

答案 0 :(得分:3)

有同样的问题。不过,我没有尝试过你所做的所有事情。我做了以下事情:

  1. IIS管理器
  2. 应用程序池
  3. 找到您的应用所属的池(对我来说是.NET v4.5
  4. 右键单击 - &gt;高级设置
  5. 向下滚动到Identity
  6. ApplicationPoolIdentity改为(对我来说是LocalSystemaf.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=&quot;
     data source=(LocalDB)\MSSQLLocalDB;
     attachdbfilename=|DataDirectory|\WeatherDB.mdf;
     integrated security=True;connect timeout=30;
     MultipleActiveResultSets=True;App=EntityFramework&quot;"
     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调试