将旧版 WCF 应用程序迁移到 CoreWCF

前言

CoreWCF 项目团队发布了 CoreWCF 的 1.0 版本,这是 WCF 到 .NET Core 平台的移植。

1e63ef6f3f6ad4225eba5a062794a2af.png

我觉得,CoreWCF 适用于这类场景使用——基于 WCF 的旧版应用程序已在 Windows 平台上运行了很多年,但是希望将代码迁移到 .NET Core,以利用 Linux 的性能、节约成本。

那么,将旧版 WCF 应用程序迁移到 CoreWCF,到底需要多大工作量呢?

下面,我们用微软提供的 TodoWCF 示例[1]进行演示。

48f3bbc7cd94895096a16fc4bd630220.png

迁移流程

1. 验证现有服务

在迁移到 CoreWCF 之前,我们首先使用以下步骤测试 WCF 应用程序:

  • 在 Visual Studio 中打开示例应用程序的 TodoWCFService.sln

  • 生成解决方案以验证它是否成功编译

  • 运行解决方案以启动服务

    5e03d0c1d3582dacbc486d41c096bc37.png

  • 创建客户端应用程序,输出TodoItem.Name

TodoServiceClient client = new TodoServiceClient();
foreach (var item in client.GetTodoItems())
{Console.WriteLine(item.Name);
}

695354d83ba1af28ab28e2bed21350ce.png

2. 使用升级助手升级应用程序

在命令提示符下,运行以下命令安装升级助手工具:

dotnet tool install -g upgrade-assistant

运行以下命令以开始升级项目:

upgrade-assistant upgrade TodoWCFService.csproj

碰到提问,一律选1

bb87e4d7c159b01051094c098c6ff250.png

升级完成后,在 Visual Studio 中打开 TodoWCFService.sln,引用 Nuget 包:

<ItemGroup><PackageReference Include="CoreWCF.Http" Version="1.0.0" /><PackageReference Include="CoreWCF.Primitives" Version="1.0.0" />
</ItemGroup>

编译成功,顺利完成升级。

但是,这时还没有完整实现 WCF 功能。

3. 暴露 Binding

修改 Startup.cs,使用BasicHttpBinding

public void ConfigureServices(IServiceCollection services)
{services.AddServiceModelServices();
}public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{app.UseServiceModel(builder =>{builder.AddService<TodoService>().AddServiceEndpoint<TodoService, ITodoService>(new BasicHttpBinding(), "/TodoService.svc");});
}

这里的ITodoService是 WCF 契约,TodoService是对应实现

4. 测试迁移后的 CoreWCF 应用程序

运行程序,会提示找不到服务页面,这是因为我们没有添加 WSDL 支持,不影响功能:

d9b580f7f398f542ccf0f9a0431634f8.png

客户端无需修改代码,只需修改服务地址,即可正常使用:

c3c31c26598934f4d0c021d5da14e9bb.png

结论

从上述过程来说,将旧版 WCF 应用程序迁移到 CoreWCF 的代价很小,有相关迁移需要的朋友可以尝试一下。

添加微信号【MyIO666】,邀你加入技术交流群

参考资料

[1]

TodoWCF 示例: https://github.com/xamarin/xamarin-forms-samples/tree/main/WebServices/TodoWCF

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

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

相关文章

C语言中的短路现象

C语言短路现象讲解 - 短路现象 1 表达式1 && 表达式2 && 表达式3; 分析&#xff1a; 只有当表达式1为真&#xff08;非0&#xff09;时才需要判断表达式2的值&#xff1b;只有表达式1和2都为真&#xff08;非零&#xff09;时&#xff1b;才需要判断表达式3的…

记录我的学习历程--二维数组解决平面图形题

打印出3 7 2 4 6 81 5 9代码如下转载于:https://blog.51cto.com/4139737/1684269

剑指offer之归并排序

1 问题 是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide and Conquer&#xff09;的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使每个子序列有序&#xff0c;再使子序列段间有序。若将两个有序表…

ArcGIS 10.6连接Access 2007(.accdb)及以上版本数据库

Microsoft Office 2007 引入一种新的 Microsoft Access 数据库格式,accdb,这是在 Access 2007 中保存或创建数据库时的新默认格式。若不使用 OLE DB,ArcGIS 无法直接读取或写入这种新的 Microsoft Access 格式,包括直接通过添加数据 对话框访问 accdb 文件。 如果是在安装了…

实现线段切割法_漫画:如何实现抢红包算法?

发出一个固定金额的红包&#xff0c;由若干个人来抢&#xff0c;需要满足哪些规则&#xff1f;1.所有人抢到金额之和等于红包金额&#xff0c;不能超过&#xff0c;也不能少于。2.每个人至少抢到一分钱。3.要保证所有人抢到金额的几率相等。小灰的思路是什么样呢&#xff1f;每…

python3 爬虫第二步Selenium 使用简单的方式抓取复杂的页面信息

Selenium 简介 该系列专栏上一篇爬虫文章点击这里。 网站复杂度增加&#xff0c;爬虫编写的方式也会随着增加。使用Selenium 可以通过简单的方式抓取复杂的网站页面&#xff0c;得到想要的信息。 Selenium 是操作浏览器进行自动化&#xff0c;例如自动化访问网站&#xff0c…

windows远程连接linux-安装xfce界面,ubuntn添加新用户

参考&#xff1a;“ 使用xrdp实现windows 远程桌面连接linux” http://blog.csdn.net/qq_33530388/article/details/64502902; http://www.linuxidc.com/Linux/2017-04/142690.htm 之前一直用mstsc连接windows主机&#xff0c;今天想用此来连接linux主机时&#xff0c;发现 连…

IP地址转化为数字,charindex ,SUBSTRING

SET NOCOUNT ON; declare I_PCity table(IPStart nvarchar(255), Area nvarchar(255),CityID int,IPID int )declare IPStart nvarchar(255),diana int, --存放点dianb int,dianc int,liea bigint, -- 存放列 lieb bigint,liec bigint,lied bigint,intlon bigin…

Qt 如何处理密集型耗时的事情

有时候需要处理一些跟界面无关的但非常耗时的事情&#xff0c;这些事情跟界面在同一个线程中&#xff0c;由于时间太长&#xff0c;导致界面无法响应&#xff0c;处于“假死”状态。例如&#xff1a;在应用程序中保存文件到硬盘上&#xff0c;从开始保存直到文件保存完毕&#…

剑指offer之数组中的逆序对

1 问题 在数组中的两个数字&#xff0c;如果前面一个数字大于后面的数字&#xff0c;则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007。 比如数列{6&#xff0c;202&#xff0c;100&#xf…

【EPS精品教程】基于DOM和DSM创建垂直模型、加载垂直模型

本教程讲解EPS三维测图模块,主要内容有新建工程、创建垂直模型,为后续工作做准备。 目录 一、创建工程 二、生成垂直摄影模型

从旧金山到上海, HTTP/3 非常快!

HTTP/3 是超文本传输协议 (HTTP) 的第三个版本&#xff0c;它对 Web 性能来说意义重大, 让我们看看HTTP/3 如何让网站的速度变得更快&#xff01;等等&#xff0c;HTTP/2 发生了什么? 不是几年前才开始推广 HTTP/2 吗? 确实是这样, 但是它出现了一些 问题[1]&#xff0c; 包括…

最大尺寸分辨率_未来就在眼前——视涯科技推出最高分辨率硅基OLED显示屏幕...

声明&#xff1a;新闻稿非映维官方稿件&#xff0c;任何法律问题均与映维无关视涯科技•未来就在眼前2019年7月9日&#xff0c;在位于合肥新站高新区的自建工厂内&#xff0c;视涯科技(以下简称&#xff1a;“视涯”)作为一家半导体显示技术公司&#xff0c;公布开发中的两款硅…

Qt 第二步 熟悉文件结构组成(二)

目录导航&#xff1a; 《Qt 第一步 HelloWorld 的第一个程序》 《Qt 第二步 槽与信号&#xff08;一&#xff09; 实现点击按钮并弹窗》 本文参考《Qt5.9 c开发》 上一篇文使用了槽与信号完成了点击按钮并弹窗的程序效果&#xff0c;这一篇文将会了解Qt的项目文件组成。本节将会…

ArrayList实现

ArrayList实现 数组实现父类:AbstractList接口:List&#xff0c;RandomAccess&#xff0c;Cloneable&#xff0c;Serializable字段://默认容量private static final int DEFAULT_CAPACITY 10;//空的数组,构造函数参数为0和trim中使用,构造参数给0的人绝对会被打死,每放一个元素…

oracle数据本机自动备份

1、创建三个文件 exp.list 内容&#xff1a;oracle数据库的用户名和密码 name pwd exp.log 主要用于存储在自动备份数据库时的日志信息 exp.sh #!/bin/sh#找到数据库的路径 export ORACLE_BASE/u01/app/oracle export ORACLE_HOME$ORACLE_BASE/product/10.2.0/db_1 export …

Chrome浏览器切换到之前打开的标签页会重新加载

这是谷歌的一种策略。当系统内存不足时&#xff0c;系统会自动从内存中舍弃标签页 在地址栏输入chrome://flags/#automatic-tab-discarding&#xff0c;设置为停用即可。转载于:https://www.cnblogs.com/freefish12/p/5435585.html

数据结构之判断一棵树是不是满二叉树

1 满二叉树 除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树。一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。 2 分析 我们知道满二叉树是三…

【Pix4d精品教程】Pix4DMapper 4.4.10/4.4.12/4.5.6经典手把手图文安装教程(附安装包下载)

Pix4Dmapper系列文章合集: 打开Pix4DMapper时提示Pix4DMapper.exe已停止工作的完全解决办法安装Pix4Dmapper时提示“无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-l1-1-0.dll”完全解决办法Pix4Dmapper完整航测内业操作流程手把手图文教程Pix4Dmapper是一款目前比…

php基础教程 第一步 环境配置及helloworld

PHP 是服务器端脚本语言。全称为 Hypertext Preprocessor 为超文本预处理器。 据说php8不久后也要发布了&#xff0c;趁着8还没有发布赶紧写一个php5到php7&#xff08;在基础教程写完后将写php7新特性&#xff09;的教程。PHP版本之间更新会增加新特性&#xff08;别的语言也…