打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(十)

本篇将在这个系列演示的例子上继续记录Asp.Net Core在Windows上发布的过程。

Asp.Net Core在Windows上可以采用两种运行方式。一种是自托管运行,另一种是发布到IIS托管运行。

第一部分、自托管

一、依赖.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": ["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只作为一个桥梁,不做任何逻辑处理。

 

最后的话

这个系列到这里就告一段落了。之所以选择使用Visual Studio Code工具开发Asp.Net Core Web Api,主要是想通过一点点慢慢搭建这个框架的过程中,逐步学习了解Asp.Net Core里几个重要的特性和功能,未来在实际开发过程中能更好的选择合适的技术方案。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ASP.NET Core 5.0 Web API 自动集成Swashbuckle
从零开始一个个人博客 by asp.net core and angular(二)
.NET Core发布在即,试着用编写一个ASP.NET Core RC2 MVC程序
asp.net 2.0升级到2.1
Asp.Net Core IIS发布后PUT、DELETE请求错误405.0 - Method Not Allowed 因为使用了无效方法(HTTP 谓词)
ASP.NET Core 2.1发布路线图
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服