• 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=".logsstdout" 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中

  • 相关阅读:
    someThink
    快捷键
    typedef 的本质
    读取配置文件
    stl file
    摘自CSDNhttp://blog.csdn.net/gnuhpc/archive/2009/11/13/4808405.aspx
    thread demo
    B/S和C/S区别 java程序员
    上传文件 java程序员
    (八)VS的操作和使用技巧 java程序员
  • 原文地址:https://www.cnblogs.com/8090sns/p/8086586.html
Copyright © 2020-2023  润新知