.NET Framework Selfhost 程序移植到 .NET Core OwinHost 实战 (一)

早前公司支持在内部开始小范围孵化 .NET Core 技术相关的产品,借以取代由 Java 重型开发的一系列产品。推动结果是相对成功的,公司自有产品继续基于 .NET Framework 继续开发,对于业务模块要求全部要在 .NET Standard 下编译通过,并且UT测试也在该环境下进行。

其中有一个比较小的模块比较特殊,它承担了数据解析,分析,并将分析结果存入 SQLServer 中,以及处理与数据服务相关 HTTP 相应。但由于历史原因,它依赖了 BCL 之外的库,但仍然想让它跨平台,至少能在 Windows Server 、Ubuntu Server 和 CentOS 上运行 。

悲催的是这个模块还引用了静态资源,Javascript 和 CSS,以及一些图片资源等。幸运的是这个模块除了 HTTP 请求处理,其它依赖项都可以将源码直接编译进来,所以我们打算将 HTTP 请求处理的框架换掉,使其不再依赖 ASP.NET MVC,并将资源使用嵌入的资源方式直接编译到程序集,再使用一个控制器处理资源请求,不过既然 ASP.NET MVC 都不依赖了,也没有控制器一说了。

调用这个模块的是一个 SelfHost 程序,侦听一个固定端口,通过 Nginx 作为反向代理服务器,供其他Web服务调用,技术实现细节也就是 HttpListener 了,并且有一大堆的 Response 的包装类,实现上不是很优雅,所以连服务器程序也打算一起换掉。

然后就是选型,替代 ASP.NET MVC 的最好框架无疑是 Nancy 了,有关 Nancy 的技术细节可以参考官网和Github。

Nancy On Github : https://github.com/NancyFx

我于 2014 年开始接触这个框架,在那时尝试过将自己个人 Blog 使用 Nancy 重写,并在树莓派上的 Raspbian Debian 上运行起来了,不过那时候没有 .NET Core,有的是一堆 Bug 的 Mono Runtime,如今 Nancy 有超过 271 个 Contributors 和 6K 的 Stars 了,超过 1400 的基佬 Fork 了这个项目,并且解决 Issues 的速度奇快,版本发布也尽然有序,这一切都是在 .NET Core 开源之后,所以我怀疑 Nancy 说不定是有巨硬爸爸在背后撑腰。

接下来需要选择 HTTP 应用服务器,也没有太多疑问,连 ASP.NET Core 已经使用 KestrelServer 了。关于 KestrelServer 我是看博客园上张善友大佬的文章入门的,KestrelServer 实现了 HTTP 的监听,请求和相应,其底层使用了 Libuv 这个库,Libuv 可以说是这几年在 Asynchronous I/O 领域的明星项目了,也大概是因为 Nodejs 的流行。

至此,依据原有的项目特性,我们做好了跨平台的技术替代方案,下篇文章将会继续描述在迁移过程中遇到的难题。

你可能感兴趣的:(.NET Framework Selfhost 程序移植到 .NET Core OwinHost 实战 (一))