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

因为自己到开发电脑转到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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321577.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core 2.0 : 图说管道,唐僧扫塔的故事

本文通过一张GIF动图来继续聊一下ASP.NET Core的请求处理管道&#xff0c;从管道的配置、构建以及请求处理流程等方面做一下详细的研究。&#xff08;ASP.NET Core系列目录&#xff09;一、概述上文说到&#xff0c;请求是经过 Server监听>处理成httpContext>Application…

ASP.NET MVC应用迁移到ASP.NET Core及其异同简介

ASP.NET Core是微软新推出支持跨平台、高性能、开源的开发框架&#xff0c;相比起原有的ASP.NET来说&#xff0c;ASP.NET Core更适合开发现代应用程序&#xff0c;如跨平台、Dorker的支持、集成现代前端开发框架(如npm、bower、gulp等等)。另外相比ASP.NET它的性能更好&#xf…

使用 C# (.NET Core) 实现模板方法模式 (Template Method Pattern)

本文的概念内容来自深入浅出设计模式一书.项目需求有一家咖啡店, 供应咖啡和茶, 它们的工序如下:咖啡:茶:可以看到咖啡和茶的制作工序是差不多的, 都是有4步, 其中有两步它们两个是一样的, 另外两步虽然具体内容不一样, 但是都做做的同一类工作.现在问题也有了, 当前的设计两个…

.NET Core Community 首个千星项目诞生:CAP

项目简介在我们构建 SOA 或者 微服务系统的过程中&#xff0c;我们通常需要使用事件来对各个服务进行集成&#xff0c;在这过程中简单的使用消息队列并不能保证数据的最终一致性&#xff0c; CAP 采用的是和当前数据库集成的本地消息表的方案来解决在分布式系统互相调用的各个环…

.NET Core 从 Github到 Nuget 持续集成、部署

一.前言Nuget 作为一个.NET研发人员&#xff0c;我想你都不会陌生&#xff0c;他为我们提供非常方便的程序包管理&#xff0c;不管是版本&#xff0c;还是包的依赖都能轻松应对&#xff0c;可以说是我们的好助手。而 Nuget 除了官方nuget.org以外&#xff0c;我们也可以用起提供…

微软发布自己定制的 Linux 内核和发行版,面向物联网

微软首次发布了自己的定制 Linux 内核和发行版。在旧金山举行的新闻发布会上&#xff0c;微软宣布了针对物联网设备的解决方案 Azure Sphere。Azure Sphere 包含三个组件。其中之一是微软设计的 Sphere MCU&#xff0c;将免费提供给厂商&#xff0c;联发科将在今年晚些时候推出…

MEDIATR 一个低调的中介者类库

微软官方的开源项目eShopOnContainers中&#xff0c;用到了一个实现中介者模式的类库&#xff1a;MediatR。这个类库的作者叫Jimmy Bogard&#xff0c;在其gtihub主页上可以看到&#xff0c;注明的对象映射组件AutoMapper 就是他写的。其博客上的自我介绍是这么写的&#xff1a…

ApacheSkyWalking APM 生态衍生多语言监控, 支持 .NET Core

Apache SkyWalking .NET core 探针发布&#xff01;GitHub: https://github.com/apache/incubator-skywalking 码云Gitee: https://gitee.com/OpenSkywalking/sky-walkingApache SkyWalking在4月初&#xff0c;发布了加入Apache孵化器后的第一个版本&#xff1a;5.0.0-alpha。…

使用TFS CI/CD 完成 VSTS 插件自动化部署和发布

Visual Studio Team Service 经过了13年的版本演进和5年的在线运营&#xff0c;现在已经是最成熟的商用DevOps工具链&#xff0c;Marketplace作为VSTS为全球开发者提供各种类型的插件市场&#xff0c;为Visual Studio, Visual Studio Code和Visual Studio Team Service本身提供…

用C# (.NET Core) 实现迭代器设计模式

本文的概念来自深入浅出设计模式一书项目需求有两个饭店合并了, 它们各自有自己的菜单. 饭店合并之后要保留这两份菜单.这两个菜单是这样的:菜单项MenuItem的代码是这样的:最初我们是这样设计的, 这是第一份菜单:这是第2份菜单:同时有两个菜单存在的问题问题就是多个菜单把事情…

2020-09-18

1.处理调用子组件方法时&#xff0c;报错undefined问题 2.var 、const 、let区别 3. curl -X GET --header "Accept: */*" "访问地址" 4.mysql中的日期格式化 5. ant-design-vue-jeecg

.NET Core/.NET之Stream简介

之前写了一篇C#装饰模式的文章用.NET Core实现装饰模式和.NET Core的Stream简介 提到了.NET Core的Stream, 所以这里尽量把Stream介绍全点. (都是书上的内容).NET Core/.NET的Streams首先需要知道, System.IO命名空间是低级I/O功能的大本营.Stream的结构.NET Core里面的Stream主…

I - Trade Gym - 100212I 网络流

网络流好题 给出A、B两个点集&#xff0c;A、B之间有边相连&#xff0c;而A和B的内部均无边相连。 题目要求求出最多删除A、B之间的多少边&#xff0c;才能使得A中点的度数至少都为2&#xff0c;B中点的度数也至少都为2。 先求出每个点的度数&#xff0c;从每个点v出发&…

【深搜】骑士游历(ssl 1277)

骑士游历 Description 如下图所示有m*n(n,m<15)一个棋盘&#xff0c;在棋盘左下角的A&#xff08;1,1&#xff09;点&#xff0c;有一个中国象棋〈马〉&#xff0c;并约定马走的规则&#xff1a; ①走日字&#xff1b;②只能向右走。 Sample Input &#xff19; &…

修复迁移后Net Standard项目中的错误

接上一章&#xff0c;项目编译结果如下&#xff1a;解决依赖dll引用在Net Framework项目的引用如下&#xff1a;各引用和作用&#xff1a;log4net(1.10.0.0) 用于写框架日志Castle.DynamicProxy(1.1.5.1) 用于代理类生成Micosoft.Practice.EnterpiseLibrary 微软企业库&#xf…

迁移Net项目为Net Core\Standard项目

背景&#xff1a;我们公司内部有自己ORM开发框架&#xff0c;最新因为需要将系统迁移到国产服务器上&#xff0c;所以首先需要将最基础的ORM框架改造可以运行在国产服务器上。对于我们Net来说&#xff0c;优选Net Core。在迁移的过程中&#xff0c;将一些经验和坑记录下来&…

迁移后的Net Standard版本的类库测试和多平台项目实测

按照第一步的方法&#xff0c;添加一个Net Core的MSTest项目&#xff0c;然后将原来的测试项目下的代码迁移到新测试 项目中&#xff0c;然后引用新的Beyondbit.Framework Core类库。然后运行单元测试项目和集成测试项目即可。测试当中单元测试下项目没有问题&#xff0c;一遍就…

.Net Core小技巧 - 使用Swagger上传文件

前言随着前后端分离开发模式的普及&#xff0c;后端人员更多是编写服务端API接口。调用接口实现文件上传是一个常见的功能&#xff0c;同时也需要一个选择文件上传的界面&#xff0c;可以编写前端界面上传&#xff0c;可以使用Postman、curl来模拟上传请求。上述的方式多多少少…

容器化分布式日志组件ExceptionLess的Angular前端UI

写在前面随着微服务架构的流行&#xff0c;日志也需要由专门的分布式日志组件来完成这个工作&#xff0c;我们项目使用的是 ExceptionLess 这个组件&#xff0c;它是前后端分离的&#xff1b;这篇文章我们就来实践容器化 ExceptionLess 的前端&#xff0c;并为其包含一个 nginx…

EF 6.x、EF Core实现dynamic动态查询和EF Core实现多个上下文实例池你了解多少?

前言很长一段时间没有写博客了&#xff0c;今天补上一篇吧&#xff0c;偶尔发现不太愿意写博客了&#xff0c;太耗费时间&#xff0c;不过还是在坚持当中&#xff0c;毕竟或许写出来的东西能帮到一些童鞋吧&#xff0c;接下来我们直奔主题。无论是在在EF 6.x还是EF Core中对于原…