我正在尝试替换通过ODATA4向移动应用程序提供信息的web服务。当前应用程序使用的是EF6,并且工作正常。
随后,我使用EF 2.1和Core Odata7.0.1构建了一个新的.NET Core2.1.1。当通过Visual Studio2017界面在IISExpress上运行时,一切似乎都是功能属性。
部署问题?:
问题似乎出在部署到IIS服务器上。我已经安装了所有正确的运行时和主机包。使用EF 2.1应用程序(网页,而不是服务)的其他.NET核心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核心应用程序的Kestrel服务器的“代理”前端。也就是说,您可能认为IIS (主机)的应用程序标识池是无关紧要的,因为.NET核心应用程序应该是“完全自包含的”。好吧..。不..。实际上,如果您离开AppPoolIdentity (缺省设置),就像您对所有以前的ASP.NET MVC应用程序所做的那样,然后出于安全原因在appsettings.json文件中创建连接字符串,那么这是不会起作用的,因为存在一个明显的缺陷(IMHO)…在我的用例中,Web Service运行在SQL Server后端,您将需要为代理(在本例中为运行您的服务的IIS AppPool )提供对同一数据库的访问权限。所以,现在我必须有两个帐户来访问后端服务...在一个有安全意识的世界里,这似乎是短小的位置!
发布于 2018-08-09 22:21:56
尽管IIS作为代理前端托管的.NET核心应用程序的短站点性质,但运行IIS的AppPool似乎需要访问用于数据库的SQL帐户所要求的同一数据库服务器。真讨厌!
感谢Edward (他发表了一条评论),它将我引导到了这篇文章:
https://stackoverflow.com/questions/51758168
复制相似问题