把旧系统迁移到.Net Core 2.0 日记(1) - Startup.cs 解析

转载 2018年04月16日 00:00:00

因为自己到开发电脑转到Mac Air,之前的Webform/MVC应用在Mac 跑不起来,而且.Net Core 2.0 已经比较稳定了。

1. 为什么会有跨平台的.Net Core 

近年来,我们已经进入云计算时代,在云平台的PaSS和SaSS上也是发生了大幅度的进化,以docker为代表。微软的Azure平台,google的GAE等等各大云计算厂商都提供了PaSS平台,我们的应用程序要迁移到这样的平台上都需要进行重写。Docker,给云计算带来一场革新,Docker可以被认为是互联网的集装箱,可以灵活地封装软件,令其更快速地传播。这对现代互联网来说是一件大事,因为软件都会运行上成百上千的机器上。Docker可以改变我们开发软件的方式,令每个人都能便捷地利用大量的运算能力。Docker可以让开发者专注于开发软件,不需要考虑在哪里运行自己的软件,这才是云计算的发展方向。开发者考虑应用本身就足够了。

以往的.NET 很难进入以docker为代表的云计算开发平台,特别是Windows不支持Docker,因为那完全是互联网服务的基石--Linux系统才有的技术,微软为了适应这样的云计算潮流,在Windows Server 2016/Windows 10上支持了docker,也重新开发跨平台.NET Core的应用运行平台。

2. 对Old .Neter, 如何尽快熟悉.Net Core 呢?

我们在vs.net 新建一个Empty Core solution, 看看程序入口program.cs,它还是一个console程序. 多引入了4个命名空间. ASP.NET Core应用的寄宿依赖于一个WebHost对象,通过对应的CreateDefaultBuilder的工厂方法创建启动一个WebHost, web服务器. 注册调用了StartUp类. 这个类里面会注册一些中间件.

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Threading.Tasks;

using Microsoft.AspNetCore;

using Microsoft.AspNetCore.Hosting;

using Microsoft.Extensions.Configuration;

using Microsoft.Extensions.Logging;


namespace sso

{

    public class Program

    {

        public static void Main(string[] args)

        {

            BuildWebHost(args).Run();

        }


        public static IWebHost BuildWebHost(string[] args) =>

            WebHost.CreateDefaultBuilder(args)

                .UseStartup<Startup>()

                .Build();

    }

}

startup类里有configureServices和configure方法, 调用顺序是先ConfigureServices后Configure。

这2个的区别是: 其中和Dependecy Injection有关的方法是放在ConfigureServices()中,

Configure()是和Middleware相关的方法

public class Startup

    {

        // This method gets called by the runtime. Use this method to add services to the container.

        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940

        public void ConfigureServices(IServiceCollection services)

        {

        }


        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)

        {

            if (env.IsDevelopment())

            {

                app.UseDeveloperExceptionPage();

            }


            app.Run(async (context) =>

            {

                await context.Response.WriteAsync("Hello World!");

            });

        }

    }

默认Empty的solution是只有一个Hello World,我们看一下典型的数据库应用,这个文件会是怎么样的,引入EF,MVC等中间件

public void ConfigureServices(IServiceCollection services)

{

    // Add framework services.

    services.AddDbContext<ApplicationDbContext>(options =>

        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));


    services.AddIdentity<ApplicationUser, IdentityRole>()

        .AddEntityFrameworkStores<ApplicationDbContext>()

        .AddDefaultTokenProviders();


    services.AddMvc();


    // Add application services.

    services.AddTransient<IEmailSender, AuthMessageSender>();

    services.AddTransient<ISmsSender, AuthMessageSender>();

}


public void Configure(IApplicationBuilder app, IHostingEnvironment env)

{

    if (env.IsDevelopment())

    {

        app.UseDeveloperExceptionPage();

        app.UseBrowserLink();

    }

    else

    {

        app.UseExceptionHandler("/Error");

    }


    app.UseStaticFiles();


    app.UseMvc(routes =>

    {

        routes.MapRoute(

            name: "default",

            template: "{controller}/{action=Index}/{id?}");

    });

}

如果要引入其他中间件,比如这个,可以参考下面文章.

ASP.NET Core 中间件之压缩、缓存
asp.net core 2.0 查缺补漏
中间件配置主要是用RunMapUse方法进行配置,请参考这个文章  ASP.NET Core 运行原理剖析

640?wx_fmt=png

 犯了一个错误,在 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware/?tabs=aspnetcore2x  这里有提到

Don't call next.Invoke after the response has been sent to the client. Changes to HttpResponse after the response has started will throw an exception.

错误代码如下: 这个代码运行时会出错,错误是

该网页无法正常运作

localhost 意外终止了连接。

ERR_INCOMPLETE_CHUNKED_ENCODING


原文地址 http://www.cnblogs.com/zitjubiz/p/net_core_daily_1.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg


.net framework 迁移至.net core2.0专题

度量.net framework 迁移到.net core的工作量(转) 1 度量.net framework 迁移到.net core的工作量 2 迁移.net framework 工程到.net ...
  • huwei2003
  • huwei2003
  • 2017-09-29 17:22:55
  • 699

在Visual Studio中将现有.NET Framework项目迁移至.NET Core 1.1 Preview 1

1)下载安装包含 .NET Core 1.1 Preview 1 的 SDK:Windows x64 安装包(下载地址列表) 2)下载最新 VS 2015 NuGet 插件:https://di...
  • NCTU_to_prove_safety
  • NCTU_to_prove_safety
  • 2017-08-04 10:43:46
  • 245

[译]ASP.NET Core 2.0 中间件

问题 如何创建一个最简单的ASP.NET Core中间件? 答案 使用VS创建一个ASP.NET Core 2.0的空项目,注意Startup.cs中的Configure()方法: publ...
  • ejingyu9724
  • ejingyu9724
  • 2017-10-22 14:13:20
  • 301

ASP.NET Core Web 支付功能接入 微信-扫码支付篇

这篇文章将介绍ASP.NET Core中使用 开源项目 Payment,实现接入微信-扫码支付及异步通知功能。开发环境:Win 10 x64、VS2017 15.6.4、.NET Core SDK 2...
  • sD7O95O
  • sD7O95O
  • 2018-03-28 00:00:00
  • 222

ASP.NET Core 2.0系列学习笔记-启动类Startup

Startup类可以用来定义处理管道和配置应用需要的服务。Startup类必须是public修饰,并且包含如下方法:public class Startup { // 运行时调...
  • ChaITSimpleLove
  • ChaITSimpleLove
  • 2018-02-26 23:00:06
  • 147

一步一步带你做WebApi迁移ASP.NET Core2.0

随着ASP.NET Core 2.0发布之后,原先运行在Windows IIS中的ASP.NET WebApi站点,就可以跨平台运行在Linux中。我们有必要先说一下ASP.NET Core。 ...
  • qq3401247010
  • qq3401247010
  • 2017-09-28 13:16:11
  • 1770

dotnetcore迁移方法初步

dotnet core出2.0了。把一些现有代码试着做了下迁移,出乎意料的顺利。这里分享一些有用的nuget包,和有用的代码:nuget包名引用原因其他Microsoft.AspNetCore.Htt...
  • wwwsq
  • wwwsq
  • 2017-09-06 10:22:33
  • 878

.net core 2.0学习笔记(四):迁移.net framework 工程到.net core

在迁移.net core的过程中,第一步就是要把.net framework 工程的目标框架改为.net core2.0,但是官网却没有提供转换工具,需要我们自己动手完成了。.net framewor...
  • ogog123
  • ogog123
  • 2017-08-22 20:18:12
  • 830

把旧系统迁移到.Net Core 2.0 日记(2) - 依赖注入/日志NLog

Net Core 大量使用依赖注入(Dependency Inject), 打个比方,我们常用的日志组件有Log4Net,NLog等等.如果我们要随时替换日志组件,那么代码中就不能直接引用某个组件的内...
  • sD7O95O
  • sD7O95O
  • 2018-04-17 00:00:00
  • 14

.Net Core下通过Proxy 模式 使用 WCF

.NET Core下的WCF客户端也是开源的,这次发布.NET Core 2.0,同时也发布了 WCF for .NET Core 2.0.0, 本文介绍在.NET Core下如何通过Proxy 消费...
  • shengjmm
  • shengjmm
  • 2017-08-21 12:09:09
  • 1032
收藏助手
不良信息举报
您举报文章:把旧系统迁移到.Net Core 2.0 日记(1) - Startup.cs 解析
举报原因:
原因补充:

(最多只允许输入30个字)