自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

從一個(gè)簡單的ASP.NET 5站點(diǎn)開啟.NET跨平臺之旅

開發(fā) 后端
在經(jīng)歷了阿里云上“黑色1秒”的空歡喜之后,我們“被迫”考慮實(shí)現(xiàn).NET的跨平臺,將Web服務(wù)器由Windows換成Linux。而這種“被迫”在一個(gè)存在已久的愿望下,變得水到渠成。這個(gè)愿望就是 —— “Mac上寫.NET程序,Linux上跑.NET程序”。

在經(jīng)歷了阿里云上“黑色1秒”的空歡喜之后,我們“被迫”考慮實(shí)現(xiàn).NET的跨平臺,將Web服務(wù)器由Windows換成Linux。而這種“被迫”在一個(gè)存在已久的愿望下,變得水到渠成。這個(gè)愿望就是 —— “Mac上寫.NET程序,Linux上跑.NET程序”。

既然水也到了,渠也成了,那我們還等什么,動(dòng)身起程吧。

今天我們以我們邁出的***步——一個(gè)部署在Linux上基于dnx/corefx/coreclr的非常簡單的ASP.NET 5/MVC 6站點(diǎn)——宣布“.NET跨平臺之旅”開啟了!

這個(gè)基于跨平臺.NET的站點(diǎn)已經(jīng)上線,訪問網(wǎng)址:http://about.cnblogs.com/ 。

該站點(diǎn)部署在CentOS服務(wù)器上(部署步驟),服務(wù)器上只安裝了dnx,沒有安裝mono,所以是完全基于.NET Core運(yùn)行。后端Web服務(wù)器用的是Kestrel,也是目前跨平臺.NET在非Windows平臺上***能用的Web服務(wù)器。

CentOS服務(wù)器上運(yùn)行情況如下:

[root@about-server AboutUs]# dnx . kestrel
Started

前端Web服務(wù)器用的是阿里云SLB(負(fù)載均衡),如果不用SLB,可以直接在CentOS上用nginx做反向代理。為什么要用前端Web服務(wù)器?因?yàn)镵estrel Web服務(wù)器實(shí)在太簡陋了,連keep-alive與http compression的功能都沒有。

該站點(diǎn)的ASP.NET 5程序是在Ubuntu服務(wù)器上用vim進(jìn)行開發(fā)的。

項(xiàng)目文件結(jié)構(gòu)如下:

  1. ├── Controllers 
  2. │   ├── AboutController.cs 
  3. │   └── HomeController.cs 
  4. ├── Extensions 
  5. │   └── HtmlHelperExtensions.cs 
  6. ├── project.json 
  7. ├── project.lock.json 
  8. ├── Startup.cs 
  9. ├── Views 
  10. │   ├── About 
  11. │   │   ├── Ad.cshtml 
  12. │   │   ├── Contact.cshtml 
  13. │   │   ├── Intro.cshtml 
  14. │   │   └── Job.cshtml 
  15. │   ├── Shared 
  16. │   │   └── _Layout.cshtml 
  17. │   └── _ViewStart.cshtml 
  18. └── wwwroot 
  19.     ├── images 
  20.     │   ├── about_cnbogs.gif 
  21.     │   ├── icon_arrow.gif 
  22.     │   └── icon_triangle.gif 
  23.     └── styles 
  24.         └── about.css 

project.json文件中的配置:

frameworks中只有dnxcore50,說明程序是完全基于.NET Core的。但由于基于coreclr的dnu restore功能目前無法使用,所以在開發(fā)環(huán)境中不得不安裝mono,用基于mono的dnu retore安裝nuget包包。

Startup.cs中的代碼如下:

 
  1. using Microsoft.AspNet.Builder; 
  2. using Microsoft.Framework.DependencyInjection; 
  3.  
  4. namespace CNBlogs.AbouUs.Web 
  5.     public class Startup 
  6.     { 
  7.         public void Configure(IApplicationBuilder app) 
  8.         { 
  9.             app.UseErrorPage(); 
  10.  
  11.             app.UseMvcWithDefaultRoute(); 
  12.  
  13.             app.UseStaticFiles(); 
  14.         } 
  15.  
  16.         public void ConfigureServices(IServiceCollection services) 
  17.         { 
  18.             services.AddMvc(); 
  19.         } 
  20.     } 
 

(注:project.json與Startup.cs中都沒有多余的配置與代碼)

程序非常簡單,沒有數(shù)據(jù)庫操作,主要就是顯示文字內(nèi)容。稍微復(fù)雜些的就是一個(gè)HtmlHelpder擴(kuò)展方法(代碼是從現(xiàn)有項(xiàng)目中移植過來的),根據(jù)訪問的URL自動(dòng)高亮左側(cè)的導(dǎo)航標(biāo)簽,代碼如下:

  1. using Microsoft.AspNet.Mvc.Razor; 
  2. using Microsoft.AspNet.Mvc.Rendering; 
  3.  
  4. namespace Microsoft.AspNet.Mvc.Rendering 
  5.     public static class HtmlHelperExtensions 
  6.     { 
  7.         public static HtmlString TabLink(this IHtmlHelper htmlHelper, string linkText, string linkUrl, string viewName) 
  8.         { 
  9.             var view = htmlHelper.ViewContext.View as RazorView; 
  10.             if (view != null && view.Path.IndexOf("/" + viewName + ".", System.StringComparison.OrdinalIgnoreCase) > -1
  11.             { 
  12.                 return htmlHelper.Raw(string.Format("<a href=\"{0}\" class=\"current\">{1}</a>", linkUrl, linkText)); 
  13.             } 
  14.             else 
  15.             { 
  16.                 return htmlHelper.Raw(string.Format("<a href=\"{0}\">{1}</a>", linkUrl, linkText)); 
  17.             } 
  18.         } 
  19.     } 

這個(gè)ASP.NET 5程序的代碼是一步一步從無到有用vim手寫出來的(除了視圖與HtmlHelperExtensions), 從中更深刻地了解了ASP.NET 5的一些工作原理,從而也得到了一個(gè)運(yùn)行這個(gè)簡單的ASP.NET 5程序所需的最小配置。

在開發(fā)過程中最痛苦的是修改代碼后ASP.NET 5不會自動(dòng)重新編譯,需要重新用dnx運(yùn)行程序;而且Kestrel目前有bug,無法退出,即使關(guān)閉ssh窗口,也照樣運(yùn)行,必須用非常規(guī)手段強(qiáng)制結(jié)束 進(jìn)程(ps all; kill -9 [PID])。但Kestrel的這個(gè)bug卻帶來一個(gè)讓人驚喜的副作用,正因?yàn)樗粏?dòng)就一直運(yùn)行,怎么也不會退出,相當(dāng)于以一種后臺服務(wù)的方式運(yùn)行, 一下子解決了部署時(shí)如何后臺運(yùn)行ASP.NET 5站點(diǎn)的問題。

雖然只是一個(gè)非常簡單的ASP.NET 5程序,雖然只是.NET跨平臺之旅非常非常小的一步,但它卻是重要的一步,因?yàn)樗屛覀儗?shí)實(shí)在在地感受到了——.NET跨平臺,路在腳下。

【更新】

15:35左右,出現(xiàn)異常造成kestrel退出,重新運(yùn)行dnx之后恢復(fù)正常。異常信息如下:

Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object.
   at Microsoft.AspNet.Server.Kestrel.Networking.UvShutdownReq.UvShutdownCb(IntPtr ptr, Int32 status)

 

責(zé)任編輯:王雪燕 來源: 博客園
相關(guān)推薦

2015-11-19 09:26:01

ASP.NET跨平臺實(shí)踐

2011-02-17 09:13:57

ASP.NET

2015-06-11 14:57:23

ASP.NET 5

2011-09-22 10:58:56

ASP.NET

2012-11-09 15:42:44

2009-08-03 14:33:02

.NET平臺c#ASP.NET

2010-01-26 13:15:42

ASP.NET MVC

2009-08-03 14:22:33

什么是ASP.NET

2009-07-28 17:17:19

ASP.NET概述

2009-07-22 17:45:35

ASP.NET教程

2009-07-29 11:18:21

ASP.NET連接My

2009-07-30 14:32:18

ASP.NET常用代碼

2009-07-24 17:08:31

添加站點(diǎn)地圖asp.net

2011-02-13 09:17:02

ASP.NET

2012-04-13 10:05:24

ASP.NET

2009-07-30 14:26:30

ASP.NET常用代碼

2009-08-04 16:24:19

合格的ASP.NET程

2012-08-27 10:11:43

ASP.NET

2009-07-23 16:44:50

XML Web服務(wù)使用ASP.NET構(gòu)造

2009-07-23 16:21:07

static變量ASP.NET
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號