使用IIS在Windows上托管ASP.NET Core(本文仅针对Window服务器)

发布时间:2018-11-27 18:09:59  访问次数:

最近想用.Net Core进行做毕业设计,于是在阿里云买了一台云服务器,学生价一折超级便宜(看着它提示毕业以后就要恢复原价,要毕业了好心酸呀QWQ),现在是10元一月,博主觉得阿里云最好的在于服务器可以随时更换镜像(0成本快速更换window->Linux),而且服务器网速超级快,基本滿足日常的使用。




注意事项:  以下出现的蓝色字体都是URL,可直接跳转,如是文件:点击直接下载即可.






配置前提



Window服务器:  阿里云服务器学生价购买地址

Windows Server 2008 R2及以上版本





注意事项:   服务器千万不要选择window server 2008 SP2 !


Windows server 2008 是基于Windows vista 的服务器系统,有32位和64位两个版本. 

Windows server 2008 R2是基于Windows 7的服务器操作系统只有64位版. 

Windows Server 2008 SP2表示是在Windows server 2008基础上添加了SP2的补丁,全称是:Windows Server 2008 Service Pack (SP) 2。






步骤一 : 首先配置IIS


1 . 低版本window server(如2008R2) 

打开控制面板 -> 程序 -> 程序和功能 -> 打开或关闭Windows功能 -> 角色 -> 添加角色 -> 选择web服务器 -> 按需勾选需要的服务 



2 . 高版本window server(如2016版本) 

按window -> 服务器管理器 ->添加角色 ->选择web服务器 -> 按需勾选需要的服务 

然后点击下一步进行安装即可。 

然后进入 控制面板 > 管理工具 > Internet 信息服务(IIS)管理器 

便可看到IIS管理器,为了方便以后使用,win10的话可以固定到开始桌面,其余window操作系统可以选择发送到桌面快捷方式。






步骤二:  安装.NET Core Windows Server Hosting软件包


1 . 在安裝.NET Core Windows Server Hosting软件包之前获取并安装Microsoft Visual C ++ 2015 Redistributable 

 2 .  在服务器上安装.NET Core Windows Server Hosting软件包。该软件包安装了.NET Core Runtime,.NET Core Library和ASP.NET Core Module。该模块在IIS和Kestrel服务器之间创建反向代理(点击可查看Kestrel原理)。 

 3 . 重新启动系统或cmd 执行net stop was / y,然后从命令提示符处启动net start w3svc,以更改系统环境变量的Path,操作完以后我们打开IIS管理工具,可以在处理程序映射看到aspNetCore。 

 4 . 安装.NET Core 2.0 SDK




注意事项:


1 :  如果安装.NET Core Windows Server Hosting不成功的话查看服务器版本是否是window server2008R2以上 

2 :  安装完一定要重新启动系统或cmd执行net stop was / y,然后从命令提示符处启动net start w3svc 

3 : 环境变量存在dotnet(如下图)才可以在web.config中这样使用




<aspNetCore processPath="dotnet" arguments=".\core.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />1




 







步骤三:  部署.NetCore程序


1 .  在IIS管理器中,创建一个新的网站,写上站点名称,并将物理路径设置为部署的应用程序文件夹(或者直接将DefaultAppPool改为无托管代码,将程序部署在此) 

 2 .  将应用程序池设置为无托管代码。 

 




步骤四:  部署完可能遇到的问题


这里仅记录博主折腾半天才解决的问题: 




1 . 出现任何无法运行的问题都应该去查看事件查看器 

 低版本server(如2008R2): 

 控制面板 > 管理工具 ->事件查看器 

 高版本(如2016): 直接按window ->事件查看器


2 .  查看发现报这个错误 

Application ‘MACHINE/WEBROOT/APPHOST/DEFAULT WEB SITE/CORE’ with physical root ‘C:\core\’ failed to start process with commandline ‘.\dotnet.exe .\core.dll’, ErrorCode = ‘0x80070002 : 0.(如下图)




出现问题思考:


1.1 一开始以为是系统变量没有dotnet.exe,查看发现有。 

1.2 折腾了半天Github和Google,看了官方文档博主都已进行尝试依旧无效(文章下面有Micorsoft官方文档)。 

1.3 怀疑或许是本地的.net core版本及服务器配置的版本不同导致,尝试改变配置文件,无奈失败。 

1.4 CMD管理员进入自己部署上去的应用程序目录,直接执行报错的内容的程序,尝试希望报个没权限的错误什么的,惊喜的是出现了想要的结果(如下图)。 

1.5 发现果然是版本的问题呀啊啊啊,开心又生气,更改版本重新部署了一遍,果然成功了,开心的写下这篇博文。










最后引言


过程确实令人苦恼又期待,结果却总是让人觉得这一切探索的过程都是值的的,如果读者在部署过程中遇到了任何问题或者发现文章有错误,可以在评论区留言,期待更多的交流。


附上Microsoft官方查阅文档:  

[1]https://docs.microsoft.com/en-us/aspnet/core/publishing/iis?tabs=aspnetcore2x#supported-operating-systems 

[2]https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/aspnet-core-module?tabs=aspnetcore2x 

[3]https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x

--------------------- 

作者:_范威_ 

来源:CSDN 

原文:https://blog.csdn.net/qq_27445903/article/details/78250897 

版权声明:本文为博主原创文章,转载请附上博文链接!