分享

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

 jinjiang9 2018-05-09

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

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

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

配置前提

  1. Window服务器: 阿里云服务器学生价购买地址
  2. 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


如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多