本篇將在這個系列演示的例子上繼續記錄Asp.Net Core在Windows上發佈的過程。html
Asp.Net Core在Windows上能夠採用兩種運行方式。一種是自託管運行,另外一種是發佈到IIS託管運行。web
修改 project.json 文件內容,增長髮布時須要包含文件的配置內容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 ,項目將會進行編譯發佈ubuntu
輸入 dotnet xxx.dll 命令啓動程序api
訪問路徑 http://localhost:5000/api/users ,頁面正常顯示。服務器
在跨平臺發佈時,.Net Core能夠經過配置的方式指定目標平臺,在發佈時將對應的運行時一併打包發佈。這樣目標平臺不須要安裝.Net Core環境就能夠部署。app
再次修改 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 命令,還原目標平臺相關的包。這個過程耗時較長。asp.net
還原完成後,執行 dotnet publish 命令進行發佈工具
進入對應發佈目錄,執行 WebApiFrame.exe 文件便可啓動項目。
若是不顯式指定目標平臺,.Net Core默認選擇當前系統平臺。若是想指定目標平臺,則須要執行命令 dotnet publish -r {目標平臺} 。下面展現的是發佈到ubuntu環境下。
首先要安裝一個工具.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裏幾個重要的特性和功能,將來在實際開發過程當中能更好的選擇合適的技術方案。