我有一个.Net Core 2.0应用程序,我在IIS 7中托管。
使用IIS Express,应用程序运行正常,并且我能够成功连接到数据库。使用IIS我收到此错误:
无法打开登录请求的数据库
"Books"
。登录失败。用户'DOMAINNAME\PCNAME$'
登录失败。
appsettings.production.json
文件中的我的connectionString如下所示:
"ConnectionStrings": {
"BooksDatabase": "Server=PCNAME\\SQLEXPRESS;Database=Books;user id=iisAccess;password=iisPassword;Trusted_Connection=True;ConnectRetryCount=0;MultipleActiveResultSets=true"
};
我做错了什么,为什么说"登录失败?' DOMAINNAME \ PCNAME $'"当我将凭据user id=iisAccess;password=iisPassword;
放入我的JSON文件中时?
答案 0 :(得分:3)
您要求进行Windows身份验证:
Trusted_Connection=True
删除连接字符串的这一部分并再试一次。
错误的原因如下:
IISExpress在登录会话中作为正常进程运行。因此它与您的Windows凭据一起运行。当您的应用程序在IISExpress中运行时,它实际上在您的凭据下运行,当您使用Windows身份验证连接到数据库时,SQL Server将接收您的登录信息。
另一方面,完整的IIS作为不同会话和不同用户帐户下的服务运行。有些应用程序池也可以在另一个帐户下运行。但主要的是那些默认的IIS帐户是本地帐户,所以他们没有"可见性"到另一台电脑。因此,当您的应用程序尝试连接到SQL Server时,SQL"会看到"机器帐户,名称为DOMAIN \ MACHINE $。
答案 1 :(得分:1)
最有可能的是,ASPNETCORE_ENVIRONMENT
未在服务器上正确设置(即未设置或未设置为Production
)。
在您的服务器上,编辑系统环境变量,并添加一个名称为ASPNETCORE_ENVIRONMENT
且值为Production
的变量(如果它不存在)。此外,在IIS中为应用程序编辑应用程序池的高级设置,并确保将密钥Load User Profile
设置为True
。