环境:Windows Server 2012, IIS 8, Asp.Net Core 1.1.

不少人第一次在IIS中部署Asp.Net Core App的人都会遇到问题,会发现原来的部署方式无法运行Asp.Net Core App程序。过去无论是原始的Asp程序还是后来的Asp.Net程序,在IIS中的部署方式都没太大变化,仅需指向程序目录,然后设定虚拟目录,最后做一些参数配置。Asp.Net Core App为了做到跨平台,自带了一个轻量级的Web Server - Kestrel,那么要在IIS中部署Asp.Net Core App,就必须有一种新的机制来协调IIS与Kestrel Server之间的数据传递。

1.  Asp.Net Core的部署模式

与传统的Asp.Net程序不同,Asp.Net Core App使用了Kestrel Server。Kestrel是一个跨平台的Web Server,与IIS一样负责请求的监听、接收和响应,但没有IIS丰富的管理功能,仍需要由IIS来处理一些前置工作。(当然你也可以使用Apache来做前置处理)

IIS负责把外部请求转发给后端的Asp.net Core App,充当“反向代理(reverse-proxy)”角色。

2.  理解反向代理

“反向”是指入站方向,“代理”可以理解为某种服务,这里是转发HTTP请求的服务。“反向代理”就是入站方向转发HTTP请求的服务。

和路由器原理一样,路由器除了让局域网能够访问internet,也可以通过设置NAT或端口映射,从internet访问内部的某台服务器,相当于把入站请求转发给指定电脑上,这与IIS的反向代理角色类似。代理服务器与路由器都是起到数据转发的作用,只不过代理服务器转发的是某类应用的数据,路由器转发的是数据包。

3.  部署环境

Asp.Net Core App部署需要操作系统满足:

  • Windows 7 或更新版本
  • Windows Server 2008 R2 或更新版本

4.  配置IIS

Windows Server上通过“添加角色和功能”,桌面Windows上通过“启用和关闭Windows功能”来安装和配置IIS。确保勾选Web服务和“IIS 管理控制台”:

Windows Server IIS 安装配置

桌面Windows IIS 安装配置

5.  安装.NET Core Windows Server Hosting程序集

安装.NET Core Windows Server Hosting程序集,让IIS具备反向代理功能。该程序集包含了.Net Core运行时(Runtime),.Net Core 类库(Library)和 Asp.Net Core Module。其中Asp.Net Core Module负责反向代理工作。

特别注意,按微软官方说法,如果是脱机安装,则需先手动安装Microsoft Visual C++ 2015 Redistributable。但实践证明即使在线安装很多时候也不会自动安装 Microsoft Visual C++ 2015 Redistributable,因此强烈建议手动安装Microsoft Visual C++ 2015 Redistributabl

另外,目前.NET Core版本升级很快,请下载最新版本的.NET Core Windows Server Hosting,确保服务器上的.Net Core版本不低于部署的Asp.Net Core App版本。

下载 Microsoft Visual C++ 2015 Redistributable

下载最新版本.NET Core Windows Server Hosting

安装完成重启系统或重启IIS服务即可。

6.  IIS中配置Asp.Net Core App

接下来的步骤与部署传统网站基本一致,但也有稍许不同,请留意。

1)  服务器中创建目录存放发布以后的App程序文件,确保App的web.config文件在网站根目录下。

2)  在网站根目录创建一个logs文件夹。如果你开启了某些日志服务,日志文件将记录在这里。当然也可以不记录日志,但初次部署对排错有帮助,建议创建。

web.config 中开启 stdoutLogEnabled="true"

<aspNetCore processPath="dotnet" arguments=".\Web.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" />

3)  在IIS管理器中添加网站。步骤与一般网站配置一致:

4) 配置应用程序池。在左侧导航栏选择“应用程序池”,选择指定程序池,右键菜单,选择“基本设置”,将.Net CLR版本设置为“无托管代码”。

7.  测试Asp.Net Core App

本例使用一个测试公网域名www.test.com,显然我们没有权限更改此域名在公网的解析记录,但我们可以更改此域名在本地的指向用于测试。使用记事本打开C:\Windows\System32\Drivers\etc\hosts文件,添加一条记录 “127.0.0.1      www.test.com”。之后我们在本地访问域名www.test.com时IP地址将解析为 127.0.0.1。使用浏览器打开www.test.com,我们会看到Asp.Net Core App已正常运行:

相关阅读:
Asp.Net Core App 部署故障示例 1Asp.Net Core App 部署故障示例 2

Windows + IIS 环境部署Asp.Net Core App的更多相关文章

  1. Windows Server 2008 R2 + IIS 环境部署Asp.Net Core App

    Windows + IIS 环境部署Asp.Net Core App   环境:Windows Server 2012, IIS 8, Asp.Net Core 1.1. 不少人第一次在IIS中部署A ...

  2. 在CentOS7 开发与部署 asp.net core app笔记

    原文:在CentOS7 开发与部署 asp.net core app笔记 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/lihongzhai/art ...

  3. Web Server 在IIS上部署ASP.NET Core项目

    在IIS上部署ASP.NET Core项目 一.配置应用程序池为无托管: 二.安装ASPNETCoreModule:(核心) 下载地址:https://go.microsoft.com/fwlink/ ...

  4. .NET开发框架(五)-IIS上部署ASP.NET Core项目教程

    系列教程:从初学者到架构师的一步步蜕变 本篇经验将和大家介绍如何在IIS上部署ASP.NET Core项目,希望对初学.NET CORE的童靴入门有所帮助! 1.打开VS,创建项目,选择ASP.NET ...

  5. 如何优雅的利用Windows服务来部署ASP.NET Core程序

    上一篇文章中我给大家讲述了五种部署ASP.NET Core网站的方法,其中有一种方式是通过Windows服务来进行部署,这样既可以做到开启自启动,又不会因为iis的反向代理而损失部分性能.但是美中不足 ...

  6. 在windows IIS服务商配置asp.net core的服务器坏境,并部署

    翻译自https://docs.microsoft.com/en-us/aspnet/core/publishing/iis 另一篇参考的文章 http://www.c-sharpcorner.com ...

  7. 在IIS上部署Asp.Net Core 2.2.0

    1. .NET Core与Windows环境 Asp.Net Core 2.2.0 Windows 10 2. 先决条件   下载并安装.Net Core Hosting Bundle. 3. 部署过 ...

  8. IIS 上部署 ASP.NET Core 应用程序

    1.下载 .Net Core Runtime 和 Hosting Bundle 下载地址:https://dotnet.microsoft.com/download/dotnet-core 分别下载 ...

  9. Asp.Net Core App 部署故障示例 1

    相关阅读:Windows + IIS 环境部署Asp.Net Core App 1.  HTTP Error 502.5 – Process Failure 环境 Windows Server 201 ...

随机推荐

  1. vwware虚拟机无法连接外网

    1.问题:动态IP时连接外网没有问题,但是将IP改为静态IP时发现没有办法连接外网 查看文件/etc/resolv.conf,里面的内容全部都被注释 [root@jenkins network-scr ...

  2. 变量覆盖漏洞学习及在webshell中的运用

    一.发生条件: 函数使用不当($$.extract().parse_str().import_request_variables()等) 开启全局变量 二.基础了解: 1.$$定义 $$代表可变变量, ...

  3. Laravel框架初学一路由(基本路由)

    基本路由 Laravel最基本的路由:接收一个URI和Closure闭包函数 ,提供了定义路由的一种非常简单且富有表达力的方式 Route::get("foo", function ...

  4. Onenet学习笔记

    中国移动物联网开放平台:https://open.iot.10086.cn/ 一.平台概述 简介 OneNET是中国移动物联网有限公司响应“大众创新.万众创业”以及基于开放共赢的理念,面向公共服务自主 ...

  5. C++ 几种经典的垃圾回收算法

    之前遇到了一篇好文(https://blog.csdn.net/wallwind/article/details/6889917)准备学习一下的,课程繁忙就忘记了,今日得闲,特来补一下. 自己写一遍加 ...

  6. JDK源码分析(三)——HashMap 下(基于JDK8)

    目录 概述 内部字段及构造方法 哈希值与索引计算 存储元素 扩容 删除元素 查找元素 总结 概述   在上文我们基于JDK7分析了HashMap的实现源码,介绍了HashMap的加载因子loadFac ...

  7. #pragma region、{}

    定义一个region,这个region内部的代码你可以把它折叠起来是用于组织代码的,没有其他特别重要的意义. 而{}定义了作用域 { int a = 0; } { int a = 0; }

  8. [IOI2007]Miners

    [IOI2007]Miners 题目大意: 两个人吃东西,总共有\(3\)种食物,每个人每次吃到食物时可以获得的收益是当前食物和前两次吃的食物中,不同食物的种数.现在给定一个长度为\(n(n\le10 ...

  9. [ZHOJ1956]vfk的地雷

    题目大意: 有$n$个开关,$r$句话. 每个开关$i$有$p_i$的概率被触发,并造成$d_i$的代价. 每个开关至多被触发一次,一句话至多触发一个开关. 每个开关按照顺序被尝试触发. 求期望代价. ...

  10. Python168的学习笔记2

    关于for循环,其实质是利用被循环对象的__iter__,或者__getitem__属性接口,由可迭代对象得到迭代器.for循环就是不断调用.next(),直到最终捕获到stop. import re ...