.NET Core 2.1和EF Framework 2.1

3
我正在尝试替换一个通过ODATA 4向移动应用提供信息的网络服务。当前应用程序使用EF6,没有错误。
随后,我构建了一个新的.NET Core 2.1.1,使用EF 2.1和Core Odata 7.0.1。当在Visual Studio 2017界面上通过IISExpress运行时,一切似乎都能正常运行。
部署问题?:
问题似乎出现在将其部署到IIS服务器上。我已经安装了所有正确的运行时和托管包。其他使用EF 2.1的.NET Core 2.1应用程序(网页而非服务)也能够正常运行。然而,该服务只会启动$metadata页面,并且会正确启动初始接口页面。一旦调用任何具有EF连接的控制器,我只收到部分页面……事件日志中没有错误,我实际上只收到主机IIS服务器的“Windows应用程序日志”中的“信息”条目,其中说:
来源:MSSQLSERVER 事件ID:18456
用户'Domain\Server16$'的登录失败。原因:找不到与提供的名称匹配的登录。[客户端:192.168.1.16]
SQL连接字符串在appsettings.json文件中,这个连接字符串在Visual Studio本身中有效...所有这些都发生在部署到实际的IIS服务器之后,并且仅适用于此Web服务,而不适用于使用EF 2.1的其他应用程序。
在开发中我有什么遗漏吗?这是一个已知问题吗?有人有线索吗?
解决方案:(有点)
我完全意识到IIS是运行.NET Core应用程序的Kestrel服务器的“代理”前端。也就是说,你会认为IIS(主机)的应用程序标识池是无关紧要的,因为.NET Core应用程序应该是“完全自包含”的。嗯...不是...事实上,如果像以前的所有ASP.NET MVC应用程序一样保留AppPoolIdentity(默认值),然后在appsettings.json文件中创建连接字符串以提高安全性,那么这将不起作用,因为有一个明显的缺陷(依我看)...在我的用例中,Web服务运行在 SQL Server 后端,您需要给代理(在这种情况下是运行服务的IIS AppPool)访问相同数据库的权限。所以,现在我必须有两个帐户获得访问后端服务的权限...在一个注重安全的世界中,这似乎是短视的!

https://weblog.west-wind.com/posts/2016/Jun/06/Publishing-and-Running-ASPNET-Core-Applications-with-IIS


1
你的连接字符串是什么样子? - gilliduck
你尝试过将 "ASPNETCORE_ENVIRONMENT" 从开发环境更改为生产环境或其他环境吗?如果已更改,您可能需要检查 JSON 文件中的值是否匹配。 - Albert Laure
gilliduck - Server=Server16$;Database=TestDB;Trusted_Connection=True;User ID=TestDBAccount;Password=TestDBAccount!" - 我认为这不是一个问题,因为这个连接字符串在Visual Studio中可以工作,其中SQL是一个远程服务器,在其他.NET CORE 2.1应用程序中也可以工作,其中SQL Server是IIS服务器的本地服务器。 - Stewart Basterash
@Edward - 作为一个快速测试,我将服务应用程序池的身份更改为我的凭据,它“神奇地”开始工作了。我知道为什么会这样,但是这里有一个问题:为什么我需要这样做?将“SQL连接字符串”放在单独的文件中的目的是让服务使用该连接字符串以“匿名”的方式访问我指定的SQL帐户来访问SQL Server...你有什么想法吗? - Stewart Basterash
请分享与 DbContext 相关的 Startup.cs 代码。通常,如果您指定了 User IDPassword,则无需在用户帐户标识下运行 Core 应用程序。对于 **Login failed for user 'Domain\Server16$'**,似乎您正在使用 Server16$ 进行登录。请分享您的 appsettings - Edward
显示剩余3条评论
1个回答

0

它为什么是“短视的”?您不必使用IIS进行托管,可以单独使用Kestrel,或者与IIS、Nginx或Apache配对在反向代理配置中使用。 - Adam Vincent
也许我在“短视”的评论上有点草率了……缺乏适当的文档更为恰当……我不得不从几篇不同的帖子中拼凑出这个服务。在我的环境中,我被迫为这个客户使用IIS。 - Stewart Basterash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接