.NET应用迁移到.NET Core--调查案例

上周已经发过三篇文章讲述做.NET 应用迁移到.NET Core的一般方法,具体内容请看:

.NET应用迁移到.NET Core(一)

.NET应用迁移到.NET Core(二)风险评估

.NET应用迁移到.NET Core(三)从商业角度看移植过程


今天给大家展示一个真实的项目的调查案例,一个轻量级的.NET 工作流引擎移植到.NET Core平台的调查案例,你也可以参照这篇案例进行迁移前的项目调查工作。

 

该调查问卷可以作为移植技术的一个指南,并且据此还可以提出其他一些问题。该问卷中的客户指的是一个要移植到.NET Core的内部或外部部门。

平台相关的内容

1、  你当前的应用程序开发平台是什么?

该问题是关于开发待移植.NET应用程序的开发平台。这里不假设开发平台和应用程序部署的平台是相同的。这留在下一个问题中。

Windows 7 + IIS 7.5 + .NET Framework 4.5 +Redis 2.4 + SQL Server 2008 R2

2、  该应用程序当前运行的平台是什么?

移植工程师需要知道待移植的应用程序当前运行的平台。

Windows 2008 R2 SP1 + IIS 7.5 + .NETFramework 4.5 + Redis 2.4 + SQL Server 2008 R2

3、  除了开发平台外,该应用程序是否还在其他平台上部署过?如果部署过,它运行的平台版本是什么?

问此问题可以让你知道应用程序的可移植性,看它是否移植到其他平台上。不过有一点需要注意:即使应用程序曾移植到其他平台上,它的目标平台可能也是比较老的版本。

没有在其他平台部署过。

4、  描述应用程序使用的系统信息,以及需要的驱动程序在Linux平台上是否可用。

确定Linux能够满足应用程序对平台的依赖。

系统信息:

  • .NET Framework 对应的Linux平台上有Mono .NET Core两大平台

  • Redis 已经是在Linux平台上运行

  • Web服务器 IIS 对应Linux平台上有Jexus(Mono) Apache/Nginx + Kestrel

  • SQL Server Linux平台上存在但是还是预览版,可以迁移到MySQL

  • Entity Framework 6.1 Entity Framework Core 本身就是跨平台的,支持在Linux平台上访问SQL Server

  • ServiceStack.Redis 也是支持Mono.NET Core

  • Owin 服务器在Linux 平台上有Jexus 支持 .NET Core的支持

  • ASP.NET Web API 2.2 Linux平台上有Mono 4.6 支持,也可以迁移到.NET Core

  • Windows服务可以迁移到Linux 的后台服务,可以Topshelf改造或者是迁移到.NET Core 控制台应用,使用Linux系统服务或者是Supervisorctl 运行

  • 站点使用的ASP.Net MVC LinuxMono 4.6 支持,或者迁移到.NET Core

应用程序相关的内容

1、  请详细描述应用程序及其结构。

在这里,用户可以描述应用程序的结构,并尽可能地包括结构图。应用程序的所有组件都要描述。如果有的话,该问题也应该会让你知道应用程序运行的框架。大部分的.NET应用程序运行在产品相关的框架上,例如IIS windows 服务和WCF服务。也就是说,需要你处理.NET Core可能不支持的某个具体的框架。

HRCommFlow应用包括2部分:对外的API服务 Web站点。


对外服务的API 服务使用ASP.NETWeb API ,使用Windows服务自宿主。使用的组件如下:

应用框架

组件

备注

ASP.NET Web API

System.Web.Http


System.Web.Http.Owin


Microsoft.Owin.Host.HttpListener


EntityFramework

访问SQL Server

Newtonsoft.Json

Json

ServiceStack.Redis

访问Redis

Tencent.OA.Framework

访问组织机构信息

ExpressionEvaluator


System.ServiceProcess


 

Web 站点使用ASP.NET MVC 4 ,使用IIS 宿主

应用框架

组件

备注

ASP.NET MVC

Microsoft.AspNet.Mvc


Microsoft.AspNet.Razor


EntityFramework

访问SQL Server

Newtonsoft.Json

Json

Tencent.OA.Framework

访问组织机构信息

ExpressionEvaluator


System.ServiceProcess


 

2、  该应用程序有哪些不同组件?请给出各组件的名称和版本号。

该问题让你细分应用程序的结构,把应用程序细分成不同的组件。也就是说,可以把整个移植工作分成多个独立的任务。

组件名称

版本号

是否公开源代码

System.Web.Http

4.0.0.0

System.Web.Http.Owin

5.2.3.0

Microsoft.Owin.Host.HttpListener

3.0.0.0

EntityFramework

6.1.3

Newtonsoft.Json

6.0.8

ServiceStack.Redis

3.9.71.0

Tencent.OA.Framework

1.0.0.0

ExpressionEvaluator

2.0.4.0

System.ServiceProcess

4.0.0.0

Microsoft.AspNet.Mvc

4.0.30506.0

Microsoft.AspNet.Razor

2.0.30506.0

 

3、  那些组件需要移植,那些不需要?请包含版本号。

客户需要告诉你那些需要移植,那些不需要。

组件名称

版本号

移植到Mono

移植到.NET Core

System.Web.Http

4.0.0.0

不需要

不需要

System.Web.Http.Owin

5.2.3.0

不需要

不需要

Microsoft.Owin.Host.HttpListener

3.0.0.0

不需要

不需要

EntityFramework

6.1.3

不需要

不需要

Newtonsoft.Json

6.0.8

不需要

不需要

ServiceStack.Redis

3.9.71.0

不需要

不需要

Tencent.OA.Framework

1.0.0.0

需要

需要

ExpressionEvaluator

2.0.4.0

需要

需要

System.ServiceProcess

4.0.0.0

不需要

不需要

Microsoft.AspNet.Mvc

4.0.30506.0

不需要

不需要

Microsoft.AspNet.Razor

2.0.30506.0

不需要

不需要

 

4、  待移植的应用百分之多少是用下列编程语言编写?

  • Java

  • C#

  • F#

  • C

  • C++

  • 汇编语言

  • Visual Basic

  • IronPython/IronRuby

  • Powershell

通过询问应用程序使用了什么语言及其所占的比重,来确定应用程序的复杂度。

100% 使用C# 语言编写

5、  粗略估计一下各语言所占的代码行数。

这是对问题4的另外一种问法,从不同的角度提出问题,常常能找到互相矛盾的地方,这就需要公开讨论,从而能够把项目调查清楚。


代码数量大概是3500 行。

 

6、  对于.NET应用程序:使用了P/Invoke来链接特有的库了吗?请描述之。

明确待移植的应用程序的复杂度。多数情况下,非100%.NET编写的应用程序,都需要平台相关的例程,这些例程只能用固有的语言来处理,例如C语言。请注意这些平台相关的代码,往往它需要花费较多的时间来移植。

没有

7、  应用程序用了操作系统内核模块了吗?如果有,请描述之。

明确待移植的应用程序的复杂度。如果应用程序使用的操作系统内核模块和例程是不可移植的,就需要花费较多时间转换成目标平台上对应的例程。

没有

8、  该应用程序是2D/3D的图形应用程序吗?请描述之。

明确待移植的应用程序的复杂度。确认.NET Core上存在兼容的图形工具和开发工具,无论是系统默认提供的或者是第三方发行商提供的。

没有

9、  应用程序使用了消息队列、共享内存、信号或者信号量吗?请描述之。

上述内容大部分能够方便的移植到.NET Core上。需要确认移植到.NET Core后,能够使原来期望的行为。

没有

10、             应用程序或其中的组件,是多线程的吗?如果是,使用的是那种线程库?应用程序依赖开发平台特有的线程属性吗?

Linux支持多种线程库,但是现在以及将来的Linux发行版中,符合标准的线程库是NPTLNative Posix Threads Library)实现。

组件没有多线程,也没有依赖开发平台特有的线程属性。

11、             应用程序的某些操作提前假设某种特定的字节顺序吗?这在移植过程会成为问题吗?

该问题是关于应用程序的大小端LittleendianBig endian)问题。大部分.NET移植到.NET Core的目标平台都是Intel平台,该平台是小端的。也有可能要把.NET程序移植到RISC 类的大端平台。假设具体的大小端代码是不可移植的,并且如果移植不正确会导致不易察觉的错误。更糟糕的是,这些错误在移植时不会暴露出来,只会在系统测试的时候会突然出现问题,并且很难找到问题的根源。

没有假设字节顺序问题,.NET Framework帮助我们解决这个问题

12、             开发平台使用的是那种编译器版本?

  • C# (什么版本?)

  • VB.NET(什么版本?)

  • F#(什么版本?)

  • 平台特有编译器(Visual C++

  • 其他(请列出)

明确待移植的应用程序的复杂度。如果待移植的应用程序用的是C#/VB.NET或者F#编译器,则移植到Linux上会简单一些,因为.NET Core.NET使用相同的编译器。如果用了windows平台特有编译器编译的应用程序,C++应用程序比C程序较难移植,应用程序可能使用了C++特性,例如模板。因为C++标准在不同厂商的编译器上实现不同,移植这种类型的代码比简单的C/C++代码要花费更多的时间。

使用C# 编写的应用程序,.NET Core.NET使用相同的编译器,Mono也是兼容的编译器。

13、             除了开发环境,应用程序还依赖其他的调试工具吗?例如内存泄漏调试器、性能分析工具、异常处理等。

这又回到了调查和分析依赖关系。Linux上可能有,也可能没有所需的第三方工具,这需要调查。谁提供许可?谁负责获取这些工具?如果需要第三方支持,谁来提供支持?

没有依赖其他的调试工具。

14、             该应用程序是基于Socket的吗?如果是,它使用了RPC吗?请描述之。

虽然Linux支持标准的socketRPC语义,但该问题的目的是确认程序的可移植性,比如.NET使用了WCFRPC.NET Core仅支持WCF的客户端访问,对于系统移植就很困难。问该问题可以搞清楚客户是否在应用程序里实现了不可移植的结构。该问题也可以引出其他问题,例如在测试阶段需要怎么样的配置。

没有使用RPC,使用的是HTTP Web API,依赖的组件Tencent.OA.Framework 依赖于WCF的客户端访问,需要移植到HTTP Web API 接口访问。

15、             应用程序使用了第三方软件组件吗(数据库工具、应用程序服务器或其他中间件)?如果是,使用了哪些组件?

每一个第三方软件组件都会增加移植的复杂度。如果使用了任何第三方组件,都需要询问试了该组件的那个版本以及.NET Core上是否存在对应版本。第三方组件可能需要额外的时间去学习,甚至是配置或编译。

应用程序使用了第三方组件,

组件名称

版本号

 Mono是否存在对应版本

.NET Core是否存在对应版本

System.Web.Http

4.0.0.0

存在

存在

System.Web.Http.Owin

5.2.3.0

存在

不存在

Microsoft.Owin.Host.HttpListener

3.0.0.0

存在

不存在

EntityFramework

6.1.3

存在

存在

Newtonsoft.Json

6.0.8

存在

存在

ServiceStack.Redis

3.9.71.0

存在

存在

Tencent.OA.Framework

1.0.0.0

存在

不存在

ExpressionEvaluator

2.0.4.0

存在

不存在

System.ServiceProcess

4.0.0.0

存在

存在

Microsoft.AspNet.Mvc

4.0.30506.0

存在

存在

Microsoft.AspNet.Razor

2.0.30506.0

存在

存在

 

16、             应用程序时如何交付和安装的?使用标准的打包工具吗?安装脚本也需要移植吗?

Linux上一个标准的打包工具是RPMRPM会在其他章节讲述。明确客户是否需要移植应用程序打包部分的内容。

使用XPlat 模式,没有使用打包工具,直接拷贝,部署运行。

17、             应用程序或组件是64位的吗?有组件需要移植成64位的吗?

随着64位平台和操作系统的普及,该问题是要知道应用程序需要运行在什么体系结构的平台上。通过现代的编译器,大部分32为应用程序都可以轻松移植到64位环境上。需要考虑的一点就是移植和调试可能需要较长的时间。

应用程序都是64位的,不存在组件需要移植成64位。

数据库内容

1、  应用程序当前支持什么数据库?请包括版本号。

现在几乎所有的企业应用程序都需要后台数据库。确认应用程序所需的数据库在Linux上可用非常重要。数据库产品以及版本之间的差别会导致增加很多移植工作。

应用程序支持的SQLServer 2008 R2,目前在Linux上处于预览版,需要移植到MySQL

2、  移植后的应用程序期望运行在什么数据库上?

除了问题1外,客户希望移植后的应用程序运行在Linux平台的什么数据库上?

希望移植后应用程序运行在LinuxMySQL 5.6上。

3、  应用程序使用了非关系数据库或私有数据库吗?

现在还有很多应用程序使用NoSQL数据库,幸运的是大部分NoSQL数据库都运行在Linux上。任何私有数据库都需要移植到Linux上。确认运行数据库的代码在Linux上可用,这也是调查阶段工作的一部分。

应用程序使用了NoSQL 数据库RedisRedisLinux上运行良好。

4、  应用程序是如何与数据库通信的?

  • 编程语言(例如C#,VB.NET等)

  • 数据库接口(例如ODBCADO.NETEntity Framework

确认所用的编程语言或接口在Linux上可用,确认是否由第三方厂商提供。

应用程序使用了Entity Framework 访问SQL Server,微软官方提供。

5、  应用程序需要使用扩展的数据类型吗(XMLaudiobinaryvideo)?

这个问题主要用来评估移植小组需要具备的技能。

应用程序使用Json 数据类型。

项目移植时间进度内容

1、  应用程序在目标平台上的正式可用日期是那天?

该问题是要明确在制定移植进度计划时,是否有商业目标需要考虑。

需要在2017年春节前上线运营。

 

2、  应用程序在目标平台上的移植工作已经开始了吗?

这可以帮助评估在正式开始之前发现的复杂度问题。

没有开始。

 

3、  估计得移植复杂度是什么(低、中还是高)?

需要仔细分析对该问题的回答。现在很可能有一些新的因素在以前的移植经历中没有完全认识到。

 

移植复杂度适中,都是用C#语言编写的应用组件,需要移植的第三方组件也比较少,而且都有源代码。

 

4、  在确定复杂度级别时,考虑了什么因素?

以前移植工作的任何信息都需要评估,并且与将来的Linux平台移植工作进行对比。

 

 

5、  该应用程序曾移植到其他平台上吗?用了多长时间?需要多少资源?遇到过什么问题?

该问题试图把以前的移植工作和.NETCore移植进行比较。这只有在移植工程师的技术领导同时具有Windows平台和Linux平台移植经验的情况下,才会有用。

没有

 

6、  你是怎样粗略估计项目移植时间和所需资源的?

应用程序或某些部分可能曾移植到其他平台上,知道向那些平台移植所花的时间会有些帮助。从那些移植过程得出的经验和教训会派上用场。吸取这些教训可以帮助你避免向.NET Core移植时重蹈覆辙。 

 

测试相关的内容

1、  请描述接收测试的环境配置。

服务器配置

用途

环境

tLinux 2.2/CentOS 7.2

API 服务器

Mono 4.6/Jexus/.NET Core 1.1/Nginx

tLinux 2.2/CentOS 7.2

数据库服务器

MySql 5.6+

tLinux 2.2/CentOS 7.2

Redis服务器

Redis 3.2

Windows Server 2008 R2

API服务器/数据库服务器

SQL Server 2008R2

 

2、  单元测试需要什么样的网络和数据库配置?

 

3、  移植测试需要多少时间和资源?

 

4、  是否已经建立了测试脚本和性能度量标准?

 

5、  需要运行一些基准测试来进行比较吗?

 

6、  性能数据在当前平台上可用吗?

 

7、  最后执行性能测试是什么时间?

 

所有测试相关的问题都适用于软件程序在Linux平台上的测试。问这些问题还可以引出其他一些与移植测试脚本和测试工具有关的问题,而这些可能会增加整个项目的风险和时间。要重点关注客户对问题1的回答。问题1和接收标准有关,这些标准需要各方在移植开始之前都同意。一个接收标准的例子是:模块AB应该通过测试用例cd,并且没有错误。当达到测试标准后,移植可以说是完成了,正式的QA测试接着就可以开始了。

项目移植的执行内容

1、  根据你希望的情况,请选择下面的一项或多项:

  • 必要的话,将会给移植工程师提供一些技术帮助。

  • 客户负责获取第三方工具许可和技术支持。

  • 其他(请描述)。

可以在这里增加你认为需要客户考虑的其他事项。有些问题可能是关于员工培训或测试应用程序等。

 

2、  项目需要什么硬件?

该问题是要确认是否会用到现有的硬件或额外的硬件,以用于移植、测试、培训,以及必要的支持等。

 

尽管上述问卷已经比较全面,但是它不应该是调查所依赖的唯一基础。调查还应该包括对应用程序源代码的实际检查。软件程序的文档也需要检查,以便用户能够从中了解到需要的应用程序信息。



.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

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

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

相关文章

Ajax前后端对接---Springmvc

Springmvc实现 实体类user Data AllArgsConstructor NoArgsConstructor public class User {private String name;private int age;private String sex;}我们来获取一个集合对象&#xff0c;展示到前端页面 RequestMapping("/a2") public List<User> ajax2(…

缓存在大型网站架构中的应用

缓存的基本知识 在整个计算机体系构造中&#xff08;无论是硬件层面还是软件层面&#xff09;&#xff0c;缓存都是无处不在的。 在计算机硬件构造中&#xff0c;由于两种介质的速度不匹配&#xff0c;高速介质在和低速介质交互时速度趋向低速方&#xff0c;这就导致了高速介质…

win10安装dockerx docker的常见命令 可以子腾讯云上做做练习

参考资料 https://www.jianshu.com/p/e8427d12b3e0 百度搜索 docker hub 可以查找 你需要的镜像 https://hub.docker.com/?utm_sourcegetting_started_guide&utm_mediumembedded_Windows&utm_campaignfind_whalesay https://blog.csdn.net/zzq060143/article/de…

Jexus 5.8.2 正式发布为Asp.Net Core进入生产环境提供平台支持

Jexus 是一款运行于 Linux 平台&#xff0c;以支持 ASP.NET、PHP 为特色的集高安全性和高性能为一体的 WEB 服务器和反向代理服务器。最新版 5.8.2 已经发布&#xff0c;有如下更新&#xff1a; 1&#xff0c;现在大部分网站已经部署HTTPS&#xff0c;大家对于安全越来越重视&…

php移动代码,移动专区周级收录如何提交 复制这段php代码即可

今天我们来讲解下“移动专区的周级提交”很多朋友都在使用移动专区(之前的熊掌号)进行提交&#xff0c;但是天级提交只给10个额度&#xff0c;需要我们不断提交10个才会有所增长&#xff0c;但是我们可以使用“周级提交”可以直接享受5万的数据提交&#xff0c;对于我们站点的收…

搭建高可用的rabbitmq集群 + Mirror Queue + 使用C#驱动连接

我们知道rabbitmq是一个专业的MQ产品&#xff0c;而且它也是一个严格遵守AMQP协议的玩意&#xff0c;但是要想骚&#xff0c;一定需要拿出高可用的东西出来&#xff0c;这不本篇就跟大家说 一下cluster的概念&#xff0c;rabbitmq是erlang写的一个成品&#xff0c;所以知道如何…

Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)

<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace"houseDao" ><result…

手机钉钉在进行视频会议时怎么录屏

https://www.iefans.net/info/v1037168.html 钉钉在进行视频会议时怎么录屏 编辑&#xff1a;秩名2020-03-24 10:14:52 钉钉 类型&#xff1a;效率办公 语言&#xff1a;简体中文 安卓下载 扫一扫下载游戏 钉钉是一款很好用的学习办公软件&#xff0c;它的工呢很多&#xf…

Vue3学习(后端开发)

目录 一、安装Node.js 二、创建Vue3工程 三、用VSCode打开 四、源代码目录src 五、入门案例——手写src 六、测试案例 七、ref和reactive的区别 一、安装Node.js 下载20.10.0 LTS版本 https://nodejs.org/en 使用node命令检验安装是否成功 node 二、创建Vue3工程 在…

微软Ignite大会约起来

今年的微软Ignite技术大会今天开始了&#xff0c;要好好学习哦&#xff0c;提供直播地址&#xff0c;通过阅读原文链接可以直达直播地址 http://soft.zdnet.com.cn/special/microsoft_ignite_2016。 大会亮点 创新 IT 技术飞速发展促发了更多行业创新&#xff0c;因此您和您的企…

aria2c rpc php,aria2c 的基本配置,附带傻瓜式源码

经常需要配置&#xff0c;但是 每次都需要查找配置项的意义&#xff0c;所以索性写在这里&#xff0c;以便有个记录&#xff0c;下次无需查找。aria2c -d/Users/blueboz/Downloads \-c \-D \-laria.log \-j5 -k1M \-x16 -s16 \--file-allocationnone \--enable-rpc \--load-coo…

最全Windows下搭建go语言开发环境以及开发IDE

https://www.cnblogs.com/ynhmonster/p/8335797.html GO语言开发环境的搭建---Windows环境下 1、Golang下载 我是通过Golang中国下载的&#xff0c;因为去官网下载十分慢&#xff0c;甚至没有进度条。 下载地址&#xff1a; https://www.golangtc.com/download 我选择的是go1…

外媒:微信小程序顺应“APP中启动APP”的行业潮流

BI中文站 11月30日报道 上周&#xff0c;中国网络巨头腾讯的高级副总裁张小龙对外披露了一些照片&#xff0c;显示聊天工具微信开始整合“小程序”。这一功能可以让微信的用户在无需下载软件的基础上&#xff0c;使用各种互联网应用服务&#xff0c;极大扩展微信的功能。 据外媒…

SpringMVC(笔记)

MVC简介 普通的web项目每次都要进行手动的把jar包导进去&#xff0c;否则会报500&#xff0c;class not found [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VstjHhuz-1609824493673)(C:\Users\王东梁\AppData\Roaming\Typora\typora-user-images…

php 去掉url中的index.php,php 去掉url中的index.php

php去掉url中的index.php的方法&#xff1a;首先打开相应的代码文件&#xff1b;然后将if代码块嵌套在server代码块中&#xff1b;最后重启nginx服务器即可。本文操作环境&#xff1a;nginx1.0.4系统、PHP7.1版&#xff0c;DELL G3电脑nginx服务器去掉url中的index.php将if代码…

在ASP.NET Core中使用百度在线编辑器UEditor

0x00 起因 最近需要一个在线编辑器&#xff0c;之前听人说过百度的UEditor不错&#xff0c;去官网下了一个。不过服务端只有ASP.NET版的&#xff0c;如果是为了能尽快使用&#xff0c;只要把ASP.NET版的服务端作为应用部署在IIS上就可以立即使用了。不过我的需求并不急&#xf…

如何用TypeScript开发微信小程序

微信小程序来了&#xff01;这个号称干掉传统app的玩意儿虽然目前处于内测阶段&#xff0c;不过目前在应用号的官方文档里已经放出了没有内测号也能使用的模拟器了。 工具和文档可以参考官方文档&#xff1a;https://mp.weixin.qq.com/debug/wxadoc/dev/?t1477926804193 Type…

八幅漫画理解使用JSON Web Token设计单点登录系统

上次在《JSON Web Token - 在Web应用间安全地传递信息》中我提到了JSON Web Token可以用来设计单点登录系统。我尝试用八幅漫画先让大家理解如何设计正常的用户认证系统&#xff0c;然后再延伸到单点登录系统。 如果还没有阅读《JSON Web Token - 在Web应用间安全地传递信息》&…

pg和oracle比较,Oracle与PostgreSQL使用差异对比与总结

JDBC连接&#xff1a;Oracle的jdbc连接字符串&#xff1a;db.urljdbc:oracle:thin:192.168.1.1:1521:ORCLPostgresql的连接字符串&#xff1a;db.urljdbc:postgresql:192.168.1.1:5432/database1、基本数据类型差异OraclePostgreSQLVarchar2varcharnumbernumericdatetimestamp/…