报错处理
在使用asp.net core读取localdb数据库时,报以下错误:
在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: SQL Network Interfaces, error: 50 - 发生了 Local Database Runtime 错误。无法创建自动实例。有关错误详细信息,请参阅 Windows 应用程序事件日志。
)
最后解决方式是在IIS中使用LocalDB需要在应用程序池中加载用户配置文件。
中途试过添加用户权限,没解决问题。貌似在网站目录下是不用单独给线程池一个用户权限的。有一个iis用户权限就够了。
参考文章:LocalDB with IIS : https://blog.ianli.site/2012/09/localdb-with-iis/
给iis不同网站单独权限: http://www.cnblogs.com/jfzhu/p/4067297.html
Using LocalDB with Full IIS, Part 1: User Profile: https://blogs.msdn.microsoft.com/sqlexpress/2011/12/08/using-localdb-with-full-iis-part-1-user-profile/
Using LocalDB with Full IIS, Part 2: Instance Ownership:https://blogs.msdn.microsoft.com/sqlexpress/2011/12/08/using-localdb-with-full-iis-part-2-instance-ownership/#UseSSE
注意看 Part2这篇文章,里面有给出三个解决iis下无法访问sqllocaldb的方法。其实主要原因是LocalDB的访问权限是根据访问者来变化的。在开发模式下,LoacalDB的创建一般是Administrator用户,开发工具VS的权限也是Administrator用户,所以访问LocalDB没有出现问题。当部署到IIS后,访问LocalDB的用户变成了IIS对应的用户,即‘IIS Pool\Your APPPoolName’,这时候由于IIS没有对应的访问权限,所以会报无法登陆的错误。解决方式可以参照Part2 的第二个方法。
部署在IIS下前言
在IIS中部署.Net Core项目,数据库使用Localdb,在部署过程中遇到不少问题,特此记录下来,分享给大家,同时方便以后查阅。首先,以文件系统的方式发布.Net Core项目。
网站部署步骤
在IIS中创建网站之后,设置网站对应的应用程序池(如:dyypm)信息如下
重点注意标识为LocalSystem,并设置加载用户配置文件为True
- 设置网站权限(如:dyypm),增加用户IIS_IUSERS
- Localdb配置
用管理员身份进入DOC命令窗口,创建Localdb的IIS共享实例,输入命令如下:
sqllocaldb share ProjectsV13 IIS_DB
使用MSSMS工具,以Windows身份方式连接共享的LocalDB实例,如无法连接可以重启机器再试。
新建查询窗口,创建应用程序池登陆用户,并授权该用户sysadmin角色,SQL脚本如下所示:
create login [IIS APPPOOL\dyypm] from windows;
exec sp_addsrvrolemember N'IIS APPPOOL\dyypm', sysadmin
修改.Net Core程序的数据库连接地址为: Server=(localdb)\\.\\IIS_DB