ASP.Net Core IIS发布问题和解决 2022.10.1~2022.10.6 跨越的深坑
背景: 项目是Uniapp+ASP.Net Core WebAPI + EFCore +三层架构 ,在开发过程中大部分已弄完,但是想挂载到IIS时暴露出的一些坑 ,这里我为大家整理了我最近遇到的一些
问题和解决办法。
IIs当有WebDAVModel模块一定要去除不然 就是405 404 等错误
去除方法
Web.config文件添加这几句,去除IIS模块WebDAVModel
除了这个当EFcore加上ASP.Net core WebAPI+加三层架构布局IIS挂载, 去除静态资源和解决一些基本问题后 我发现 当请求《测试接口》一切正常比如这样,能够返回相应结果
但是当测试访问数据库等接口的时候还是会报500的错误,此时我就怀疑是依赖出现问题,因为通过EF访问数据库的这些接口,我在swagger上都是进行过测试,综上,我在这几天翻阅了大量资料从误以为SDK版本和 Hosting版本不统一到使用别的服务注册包等等,三四天后,我真的呵呵了,有点小崩溃。后面就是新建一个Demo逐步测试,发现应该是Sqlserver权限的问题并且发现进程模型标示有误
下面就是我的一些解决步骤,
步骤1
第一步就是解决标示和CLR版本更改
改为
注解
Local System标识
这个标识是内置的这几个账户里面的级别最高的一个,那么说也就是风险最高的一个,并且也是配置起来最简单的一个了。
只需要将程序池中的标识符更改为LocalSystem,并且给文件夹权限分配一个Everyone用户权限就可以了。
原因
改为无托管是因为.Net Core是不需要IIS来托管的,是属于自托管模式,所以程序池中你需要改为无托管代码,当然如果你第一次来进行挂载你还需要下载 Server Hosting 就是要在IIS添加一个AspNetCoreModule托管模块,
因为我是.Net5 所以我对应Hosting版本下载后张这样
改ApplicationPoolIdentify 标示是因为这个标示是最安全的但是他会给你弄一个虚拟账号,这里我的思考是我的项目不需要托管给他,但是还帮我管控。所以这是不行的要改为LocalSystem
步骤2
之后你会发现还是不行,还是会报500,如果你开启stdoutLogEnabled="true" 日志会提示你
无法打开登录所请求的数据库 "****"。登录失败。
用户 'WorkGroup\JEEPCAT$' 登录失败。
当我看到后,我就意识到了SqlSever权限问题,在经历一番网上翻阅,解决办法如下
找到你当前数据库的用户
右键添加用户 用户名为“NT AUTHORITY/SYSTEM”其他的对应
拥有框架和成员身份 选择数据库自己
到这里基本上就好了测试结果 ok
总结:不积跬步无以至千里,不积小流无以成江河;希望文章能够对你有所帮助。