NetCore Selfhost,IIShost,Windows Service Host详解(自宿主、宿主在IIS,宿主在Windows Service中)
第一部分、自托管
一、依赖.Net Core环境
修改 project.json 文件内容,增加发布时需要包含文件的配置内容(NetCore2.0版本不需要任何设置,NetCore2.0开始彻底放弃project.json,全面改回.csproj,详见难以接受你的改变:从project.json到.csproj)

1 {
2 "version": "1.0.0-*",
3 "testRunner": "xunit", // 设置测试工具为xunit
4 "buildOptions": {
5 "debugType": "portable",
6 "emitEntryPoint": true
7 },
8 "dependencies": {
9 "Microsoft.NETCore.App": {
10 "type": "platform",
11 "version": "1.0.0"
12 },
13 "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
14 "Microsoft.AspNetCore.Mvc": "1.0.0",
15 "Microsoft.Extensions.Logging": "1.0.0",
16 "Microsoft.Extensions.Logging.Console": "1.0.0",
17 "Microsoft.Extensions.Logging.Debug": "1.0.0",
18 "Microsoft.Extensions.Logging.Filter": "1.0.0",
19 "NLog.Extensions.Logging": "1.0.0-rtm-alpha2",
20 "Autofac.Extensions.DependencyInjection": "4.0.0-rc3-309",
21 "Microsoft.Extensions.Configuration": "1.0.0",
22 "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",
23 "Microsoft.Extensions.Configuration.Json": "1.0.0",
24 "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
25 "xunit": "2.2.0-beta2-build3300",
26 "dotnet-test-xunit": "2.2.0-preview2-build1029",
27 "moq.netcore": "4.4.0-beta8",
28 "Microsoft.AspNetCore.TestHost": "1.0.0",
29 "Newtonsoft.Json": "9.0.1"
30 },
31 "frameworks": {
32 "netcoreapp1.0": {
33 // 设置兼容框架
34 "imports": [
35 "dotnet54",
36 "portable-net45+win8"
37 ]
38 }
39 },
40 "publishOptions": {
41 // 设置发布时需要包含的文件
42 "includeFiles": ["appsettings.json", "nlog.config"]
43 }
44 }

打开cmd窗口,进入到项目根目录,输入命令 dotnet publish ,项目将会进行编译发布

输入 dotnet xxx.dll 命令启动程序

访问路径 http://localhost:5000/api/users ,页面正常显示。
二、自带运行时发布
在跨平台发布时,.Net Core可以通过配置的方式指定目标平台,在发布时将对应的运行时一并打包发布。这样目标平台不需要安装.Net Core环境就可以部署。
再次修改 project.json 文件,增加目标平台

1 {
2 "version": "1.0.0-*",
3 "testRunner": "xunit", // 设置测试工具为xunit
4 "buildOptions": {
5 "debugType": "portable",
6 "emitEntryPoint": true
7 },
8 "dependencies": {
9 "Microsoft.NETCore.App": {
10 //"type": "platform", // 这个需要注释掉
11 "version": "1.0.0"
12 },
13 "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
14 "Microsoft.AspNetCore.Mvc": "1.0.0",
15 "Microsoft.Extensions.Logging": "1.0.0",
16 "Microsoft.Extensions.Logging.Console": "1.0.0",
17 "Microsoft.Extensions.Logging.Debug": "1.0.0",
18 "Microsoft.Extensions.Logging.Filter": "1.0.0",
19 "NLog.Extensions.Logging": "1.0.0-rtm-alpha2",
20 "Autofac.Extensions.DependencyInjection": "4.0.0-rc3-309",
21 "Microsoft.Extensions.Configuration": "1.0.0",
22 "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",
23 "Microsoft.Extensions.Configuration.Json": "1.0.0",
24 "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
25 "xunit": "2.2.0-beta2-build3300",
26 "dotnet-test-xunit": "2.2.0-preview2-build1029",
27 "moq.netcore": "4.4.0-beta8",
28 "Microsoft.AspNetCore.TestHost": "1.0.0",
29 "Newtonsoft.Json": "9.0.1"
30 },
31 "frameworks": {
32 "netcoreapp1.0": {
33 // 设置兼容框架
34 "imports": [
35 "dotnet54",
36 "portable-net45+win8"
37 ]
38 }
39 },
40 "publishOptions": {
41 // 设置发布时需要包含的文件
42 "includeFiles": [
43 "appsettings.json",
44 "nlog.config"
45 ]
46 },
47 // 目标平台
48 "runtimes": {
49 "win7-x64": {},
50 "win10-x64": {},
51 "ubuntu.14.04-x64": {}
52 }
53 }

cmd窗口运行 dotnet restore 命令,还原目标平台相关的包。这个过程耗时较长。
还原完成后,执行 dotnet publish 命令进行发布

进入对应发布目录,执行 WebApiFrame.exe 文件即可启动项目。
如果不显式指定目标平台,.Net Core默认选择当前系统平台。如果想指定目标平台,则需要执行命令 dotnet publish -r {目标平台} 。下面展示的是发布到ubuntu环境下。

第二部分、IIS托管
首先要安装一个工具.NET Core Windows Server Hosting。该工具支持将IIS作为一个反向代理,将请求导向Kestrel服务器。
引入相关nuget包
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0"
修改 Program.cs 内容

1 using Microsoft.AspNetCore.Hosting;
2
3 namespace WebApiFrame
4 {
5 public class Program
6 {
7 public static void Main(string[] args)
8 {
9 var host = new WebHostBuilder()
10 .UseKestrel()
11 .UseIISIntegration()
12 .UseStartup<Startup>()
13 .Build();
14
15 host.Run();
16 }
17 }
18 }

在项目根目录添加web.config,并配置到发布包含文件列表中

1 <?xml version="1.0" encoding="utf-8"?>
2 <configuration>
3
4 <!--
5 Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380
6 -->
7
8 <system.webServer>
9 <handlers>
10 <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
11 </handlers>
12 <aspNetCore processPath="dotnet" arguments=".\WebApiFrame.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />
13 </system.webServer>
14 </configuration>

执行 dotnet publish 发布后开始配置IIS

修改应用程序池,.Net CLR版本修改为:无托管代码

启动网站,访问地址 http://localhost:8080/api/users ,页面将显示内容。
在上面的例子里,IIS通过Asp.Net Core Module,提供了反向代理的机制。
通过访问IIS地址,将请求导向Asp.Net Core内置的Kestrel服务器,经过处理后再反向回传到IIS。整个过程IIS只作为一个桥梁,不做任何逻辑处理。
第二部分、托管在Windows Service中
详见这里:ASP.NET Core应用到Windows Service中
NetCore Selfhost,IIShost,Windows Service Host详解(自宿主、宿主在IIS,宿主在Windows Service中)的更多相关文章
- windows socket函数详解
windows socket函数详解 近期一直用第三方库写网络编程,反倒是遗忘了网络编程最底层的知识.因而产生了整理Winsock函数库的想法.以下知识点均来源于MSDN,本人只做翻译工作.虽然很多前 ...
- redis.windows.conf配置详解
redis.windows.conf配置详解 转自:https://www.cnblogs.com/kreo/p/4423362.html # redis 配置文件示例 # 当你需要为某个配置项指定内 ...
- Android中Service(服务)详解
http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...
- Python调用windows下DLL详解
Python调用windows下DLL详解 - ctypes库的使用 2014年09月05日 16:05:44 阅读数:6942 在python中某些时候需要C做效率上的补充,在实际应用中,需要做部分 ...
- 【转载】Android Studio Service AIDL 详解
公司产品之前IM这块存在很多问题,消息到达率低,加上协议上有些问题,丢消息频繁,所以需要重构IM,AIDL不能解决以上问题.好吧!那AIDL可以解决什么问题?什么是AIDL? 什么是AIDL? AID ...
- 重装Windows系统 入门详解 - 基础教程
重装Windows系统 入门详解 - 基础教程 JERRY_Z. ~ 2020 / 10 / 13 转载请注明出处!️ 目录 重装Windows系统 入门详解 - 基础教程 一.说明 二.具体步骤 ( ...
- windows 安装Git详解
windows 安装Git详解 一.Git简介 Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. Git 是 Linus Torvalds 为了帮助管理 Lin ...
- windows curl命令详解
概述 Curl命令可以通过命令行的方式,执行Http请求.在Elasticsearch中有使用的场景,因此这里研究下如何在windows下执行curl命令. 软件下载 下载地址:https://cur ...
- 【JavaScript】windows.open用法详解
windows.open("URL","窗口名称","窗口外观设定");的用法详解 function onNewWindows(redire ...
随机推荐
- [转载]SVN trunk、branch、tag的用法
Subversion有一个很标准的目录结构,是这样的. 比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是 svn://proj/|+-trunk+-branches+-t ...
- lzugis——Arcgis Server for JavaScript API之POI
POI(Point Of Interest),感兴趣点,其实呢,严格意义上说应该不是POI,但是单位就这样叫了,我也就这样叫了,其实现的功能大致是这样的:用过百度地图的朋友们都知道你在百度地图时,当鼠 ...
- Java虚拟机运行时数据区域划分
Java虚拟机数据运行时区域 方法区(Method Area) 存储加载的类信息,常量,静态变量,编译器编译后的代码等数据.虽然JVM规范把方法区描述为堆的一个逻辑部分,但它却有一个别名叫做N ...
- 【MFC】mfc控件位置调整和坐标确定 .
摘自DoubleLi: http://www.cnblogs.com/lidabo/archive/2012/08/24/2654678.html mfc控件位置调整和坐标确定 http://my ...
- linux中文件或者文件夹的基本操作(复制,移动,删除,查找,压缩)
linux 文件(文件夹)的创建,复制,移动,重命名,删除基本命令 复制文件或整个目录 cp 源文件名 目标文件夹/[目标文件名]cp -rv 源文件夹 目标文件夹/[目标文件夹名] --r 递归目录 ...
- Linux 下新增用户的流程
一: 新增用户 1.添加新的用户账号使用useradd命令,其语法如下: 代码:useradd 选项 用户名其中各选项含义如下: 代码:-c comment 指定一段注释性描述.-d 目录 指定用户主 ...
- Microsoft Office Visio 2013 (安装 + 激活)
Visio是一款能处理复杂信息.系统和流程进行可视化.分析和交流的软件,从“office 2003”以后,Visio作为一个单独软件发行,不再集成于office办公软件. 工具/原料 Visio 电脑 ...
- 10 结构体和类 - —— 《Swift3.0 从入门到出家》
Swift中的面向对象5个要素:枚举.结构体.类.协议.扩展 面向对象研究的是对象,完成一件事情需要多个对象参与,是生活的映射 Swift中结构体和类非常相似,也就是结构体能完成类的所有功能.结构体是 ...
- Angular2语法指南
引导 import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; platformBrowserDynami ...
- window下安装mysql
参考地址: https://www.cnblogs.com/lmh2072005/p/5656392.html http://www.jb51.net/article/90302.htm 一.下载安装 ...