有人说.NET在国内的氛围越来越不行了,看博客园文章的浏览量也起不来。是不是要转Java呢? 没有必要扯起语言的纷争,Java也好C#都只是语言是工具,各有各的使用场景。以前是C#非开源以及不能在Linux上使用,没有被互联网公司考虑,但它仍然有它的用途。这几年国内互联网公司进入蓬勃发展时期,所有才有这样的趋势。但并不代表C#不能做互联网应用,可以说在接下来的一年内.net core将会成为一个很好的趋势,结合容器以及微服务架构会成为互联网公司另一个比较好的选择。

作为现在在用.NET的公司,如果有机会可以考虑与时俱进,在真实项目中将.net core用起来。

我们首先来看看ASP.NET Core有哪些优势?

  1. 跨平台:可以部署到Linux服务器上
  2. 内置一套对云和部署环境非常友好的配置模块
  3. 内置依赖注入
  4. IIS或者Kestrel(或者其它自定义)
  5. 轻量级、高性能、模块化的Http处理管线
  6. .NET Core 是开源的,并且基于nuget发布。 这让我们有了更大的空间去改造和扩展它
  7. 更易于现代化的项目开发,比如面向容器,微服务架构,对DevOps更友好

如果你看到这段文字,说明您正使用RSS阅读或转自《一棵树-博客园》,原文地址:https://www.cnblogs.com/atree/p/netcore-transfer.html 

公司的决策层为什么要做这样的选择?
  1. 降低成本,提升效率
  2. 提升公司的技术品牌
  3. 更好的留住和培养现有的开发团队,以及招募到更好的开发者
 
在同等用户规模的情况下,选择 Linux的服务器比Windows Server的性价比更高。在一个产品的整个实现与运营生命周期当中,编码只占了很小的一部分,还有开发与测试环境的初始化与维护,测试与集成,线上环境部署与运维这都会占用不少的时间,通过自动化可以大幅度的减少这些时间。而在.NET Core实现跨平台之后,让自动化的门槛降到最低。你不再需要一个资深的架构师或者专业的DevOps才可以实现,一个有经验肯学习的开发者足以应付。
 

如何来做升级和改造 ?

 
 说到真实产品的技术升级和改造,不伤筋动骨,不可能完成。
  1. 老系统是 asp.net Web Form
  2. 老系统是asp.net MVC或者WEB API

由于对system.web的重依懒,将Web Form迁移到ASP.NET Core几乎是不可能。如果Web Form项目使用了服务器端控件,那已经可以放弃往下走,可以尝试开始一个新的项目逐步替换老的项目。如果没有使用服务器端控件,用handller在返回数据,则可以考虑先将Web Form的项目进行前后端分离或者API 分离,在视图层逻辑不变的情况下重写后端逻辑部分。当然这个代价也不小,所以转型和升级需要准备的事情有很多。

最合适的步骤是先在一些新的项目上采用ASP.NET Core来开发。就语言特性本身来说ASP.NET Core的变化不大,学习成本也不高。但是生产环境不是随便玩的,要从无到有,过程比较艰难,这也是很多小公司到现在还没有在生产上用上.NET Core人原因之一。只有开发人员干着急,我们什么用.NET Core 呢?

与其等待你的总监做这个决定,不如自己先干起来。如果不能从无到有,那么我们可以在原来的系统上换部件:也就是我们的最小升级方案,将.NET Core部署在IIS上。

最小升级方案:将ASP.NET Core部署在IIS上

关于如何把ASP.NET Core的网站或者API部署到IIS上,网上已经有比较多的介绍,可以参考这里。主要是需要先下载一个ASP.NET Core的模块安装之后再进行简单的配置,新手比较容易忽略。如果你的IIS模块里面没有AspNetCoreModule,说明没有安装这个ASP.NET Core模块,需要进行下载安装。

 
ASP.NET Core所有的项目都必须运行在Kestrel或者一个自定义的Web Server上。
 
在asp.net core 2.0时,采用默认的  WebHost.CreateDefaultBuilder().Builder() 得到的Host已将将 Kestrel和IISIntegration都添加进来。
public static void Main (string[] args) {
BuildWebHost (args).Run ();
} public static IWebHost BuildWebHost (string[] args) {
return WebHost.CreateDefaultBuilder (args)
.UseStartup<Startup> ()
.UseKestrel (options => {
options.Listen (IPAddress.Loopback, );
options.Listen (IPAddress.Loopback, , listenOptions => {
listenOptions.UseHttps ("testCert.pfx", "testPassword");
});
})
.UseIISIntegration ()
.Build ()
}

IISIntegration其实是将IIS做一个反向代理,AspNetCoreModule的任务就是将请求转发给Kestrel。

当然你也可以选择用Nginx或者 Apache来做反向代理,来实现ASP.NET Core在Linux上的部署。这里有一篇不错的实践贴(将ASP.NET Core应用程序部署至生产环境中(CentOS7)

在我们的最小升级方案里面,部署到IIS是在生产环境中使用ASP.NET Core是最易实现和成本最低的一种。剩下的,等开发人员对ASP.NET Core掌握的比较牢固,对Linux的运维也有一些经验之后可以再尝试往Linux上迁移。

 

新老项目交互的问题

除了刚起步没有任何历史负担的公司,我们大多数所在的公司都处于老系统维护和新系统开发并行的情况。在新系统的开发过程当中,少不了要与老系统打交道。比如最常用的一些其它系统的数据访问,就会面临是重写好,还是调用老系统中的代码比较好的问题。

这里没有明确的答案,取绝于当前业务的发展和我们所拥有的时间来决定 。人和时间够整个系统重写都可以,不够的话我们也只能采用系统嫁接的方式。

根据老系统的结构主要分两种:

  1. 前后端未分离,就是一个大的网站
  2. 前后端已分离,前端和移动端直接调用ASP.NET Web API

第一种情况会给系统以及开发增加的复杂度是: 本地代码访问变成API访问之后的引发的问题,这也是多数团队在做服务化时首先遇到的问题。
  • 增加额外的API访问代码
  • 增加Debug的复杂度,不好找原因
第二种情况,已经API化只是没有做拆分。那我们新写的ASP.NET Core API 可以直接被访问。这里的问题是要解决认证授权的问题包括(从客户端到Core API,以及从Core API到原来的Web API)

注:这种方案应该禁止从老的ASP.NET Web API访问 ASP.NET Core的项目。最后应该是停止维护老项目,所有代码在新的ASP.NET Core上进行开发。 Proxy的设计应该按照新的框架来设计,实现可以嫁接老的API,做好被新代码替换掉的准备。

 
 

企业应用向ASP.NET Core迁移的更多相关文章

  1. 新的ASP.NET Core 迁移指南

    最近在微信里做了一个调查: Web Forms应用程序升级到.NET 6, 收到550份调查,调查还在继续,欢迎参与调查.可以访问链接:https://wj.qq.com/s2/9822949/ac3 ...

  2. 向ASP.NET Core迁移

    有人说.NET在国内的氛围越来越不行了,看博客园文章的浏览量也起不来.是不是要转Java呢? 没有必要扯起语言的纷争,Java也好C#都只是语言是工具,各有各的使用场景.以前是C#非开源以及不能在Li ...

  3. .NET跨平台之旅:ASP.NET Core从传统ASP.NET的Cookie中读取用户登录信息

    在解决了asp.net core中访问memcached缓存的问题后,我们开始大踏步地向.net core进军——将更多站点向asp.net core迁移,在迁移涉及获取用户登录信息的站点时,我们遇到 ...

  4. DataProtection设置问题引起不同ASP.NET Core站点无法共享用户验证Cookie

    这是这两天ASP.NET Core迁移中遇到的一个问题.2个ASP.NET Core站点(对应于2个不同的ASP.NET Core Web应用程序),2个站点都可以登录,但在其中任1个站点登录后,在当 ...

  5. NET Core迁移

      向ASP.NET Core迁移   有人说.NET在国内的氛围越来越不行了,看博客园文章的浏览量也起不来.是不是要转Java呢? 没有必要扯起语言的纷争,Java也好C#都只是语言是工具,各有各的 ...

  6. 移花接木:借助 IViewLocationExpander 更换 ASP.NET Core View Component 视图路径

    端午节在家将一个 asp.net 项目向 asp.net core 迁移时遇到了一个问题,用 view component 取代 Html.RenderAction 之后,运行时 view compo ...

  7. Asp.Net Core采用MailKit部署到Linux Docker连接邮件服务器报错

    前段时间看文章了解到发邮件的SmtpClient已经过时了,微软官方推荐大家用其他解决方案,例如MailKit. https://docs.microsoft.com/zh-cn/dotnet/api ...

  8. 【译】在 ASP.NET 和 ASP.NET Core 之间共享代码

    原文 | Ken 翻译 | 郑子铭 随着 .NET 6 的发布,使用 ASP.NET Core 可以获得更多好处.但是将现有代码迁移到 ASP.NET Core 通常听起来像是一项巨大的投资.今天我们 ...

  9. 为什么 web 开发人员需要迁移到. NET Core, 并使用 ASP.NET Core MVC 构建 web 和 webservice/API

    2018 .NET开发者调查报告: .NET Core 是怎么样的状态,这里我们看到了还有非常多的.net开发人员还在观望,本文给大家一个建议.这仅代表我的个人意见, 我有充分的理由推荐.net 程序 ...

随机推荐

  1. Powershell ExecutionPolicy 执行策略

    简单说明 powershell对于脚本的执行有着严格的安全限制 Get-ExecutionPolicy -List #查看当前的执行策略 Set-ExecutionPolicy -Scope Curr ...

  2. C# NPOI Excel

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  3. C#: 解决Fody is only supported on MSBuild 16 and above

    背景信息: 使用Costura.Fody插件将自己写的程序打包成一个可以独立运行的EXE文件我们在开发程序的时候会引用很多DLL文件,在程序完成编写后,如果不把这些引用的DLL打包,在拷贝给到别人使用 ...

  4. python中class的总结

    思维导图文件:https://files-cdn.cnblogs.com/files/benjieming/class%E6%9C%BA%E5%88%B6.zip

  5. WebService 创建、发布、调用

    环境Win7+VS2017 启用IIS 查看iis是否启用 新建 ASP.NET Web 应用程序 项目,项目中添加Web 服务 在 asmx  文件中添加需要的方法 运行结果 发布 创建新的文件夹, ...

  6. Webpack相关原理浅析

    基本打包机制 本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler).当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(de ...

  7. fgets实现

    char *fgets(char *s, int n, FILE *stream) { register int c; register char *cs; cs = s; while(--n > ...

  8. 用构造函数创建对象时,new的行为

    用构造函数创建对象: var obj=new 类型名(属性值,…) new: 4件事: 1. 创建一个空对象 2. 让新的子对象继承构造函数的原型对象设置(自动设置新对象的__proto__属性指向构 ...

  9. python从入门到放弃之进程锁lock

    # ### lock (互斥锁)"""# 应用在多进程当中# 互斥锁lock : 互斥锁是进程间的get_ticket互相排斥进程之间,谁先抢占到资源,谁就先上锁,等到解 ...

  10. 【原创】CentOS 7 安装redis 5

    1.下载redis安装包 cd /softwares/ wget http://download.redis.io/releases/redis-5.0.5.tar.gz 2.解压redis-5.0. ...