将旧版 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,一经查实,立即删除!

相关文章

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

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

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

发出一个固定金额的红包&#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;发现 连…

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

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

【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的项目文件组成。本节将会…

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

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

Hadoop(五)C#操作Hive

HiveHive将HiveQL&#xff08;类sql语言&#xff09;转为MapReduce&#xff0c;完成数据的查询与分析&#xff0c;减少了编写MapReduce的复杂度。它有以下优点&#xff1a;学习成本低&#xff1a;熟悉sql就能使用良好的数据分析&#xff1a;底层基于MapReduce实现同样存在一些缺…

深度优先搜索——八皇后问题

代码&#xff1a;&#xff08;控制台打印不了92种情况&#xff0c;只打印前10种&#xff09; 1 #include<iostream>2 #include<string>3 #include<windows.h>4 #define ok 15 #define error 06 using namespace std;7 8 9 int a[9][9]{0}; 10 int num0; 1…

python3 爬虫第三步 本文包你学会正则 不会就来锤我

简介 正则表达式是一种描述字符的一种方式&#xff0c;通过该方式&#xff0c;匹配字符串。 正则表达式是自由的&#xff0c;一个字符的含义往往代表着一类字符&#xff0c;通过多个正则正则符号的组合描述&#xff0c;可以使组成的正则表达式能够描述一类字符串。 在开发中&a…

.NET性能优化-使用结构体替代类

前言我们知道在C#和Java明显的一个区别就是C#可以自定义值类型&#xff0c;也就是今天的主角struct&#xff0c;我们有了更加方便的class为什么微软还加入了struct呢&#xff1f;这其实就是今天要谈到的一个优化性能的Tips使用结构体替代类。那么使用结构体替代类有什么好处呢&…

ISE14.7兼容性问题集锦

一、 关于win8和win10不兼容性解决办法 &#xff08;win7不会出现闪退的问题&#xff0c;按安装流程做完就可以直接使用了&#xff09; 在安装目录下&#xff0c;我这里是D:\ISE_14.7\14.7\ISE_DS\ISE\lib\nt64中找到libPortability.dll和libPortabilityNOSH.dll两个文件夹&…

幼儿园调查过程怎么写_深圳全托幼儿园哪个好 幼儿园寄宿怎么报名

陪孩子一起阅读的精髓不是认字和背诵&#xff0c;亲子阅读的那些事 亲子阅读是当代的养育新潮流&#xff0c;但它还有更可贵的一面。 脾气再大的妈妈&#xff0c;都有温柔可爱的时刻&#xff0c;就是陪伴孩子阅读的时刻&#xff0c;曾经有一位在我看来算不上温柔的妈妈&#xf…

ArcGIS实验教程——实验二:ArcGIS地理配准完整操作步骤

ArcGIS实验视频教程合集&#xff1a;《ArcGIS实验教程从入门到精通》&#xff08;附配套实验数据&#xff09; 目录 一、地理配准工具条简介 二、地理配准过程 1、加载数据&#xff08;点击下载&#xff09;提取码&#xff1a;v9y8 2、加载地理配准工具条 3、添加控制点 …

php基础教程 第二步 通俗易懂的学习变量、常量与数据类型

简介 变量、常量以及数据类型 在编程中&#xff0c;变量指一个存储值的一个盒子&#xff0c;或者说容器。例如一个箱子&#xff0c;用来放杂物&#xff0c;这个箱子就是一个容器&#xff0c;值就为杂物。容器可以分为很多类型&#xff0c;例如瓶子、被子、盒子等。值也有很多类…

可见光能量范围_JACS:游书力团队通过可见光促进的吲哚衍生物分子内去芳构化合成环丁烷稠合的四环吲哚螺环...

点击上方了解化学加VIP会员企业导读近日&#xff0c;中国科学院上海有机所游书力团队开发了一种可见光促进的吲哚衍生物分子内[22]环加成方法&#xff0c;可以极好的收率和立体选择性得到环丁烷稠合的四环吲哚螺环(Scheme 1&#xff0c;底部)。该成果近期发表在J. Am. Chem. So…

记将一个大型客户端应用项目迁移到 dotnet 6 的经验和决策

在经过了两年的准备&#xff0c;以及迁移了几个应用项目积累了让我有信心的经验之后&#xff0c;我最近在开始将团队里面最大的一个项目&#xff0c;从 .NET Framework 4.5 迁移到 .NET 6 上。这是一个从 2016 时开始开发&#xff0c;最多有 50 多位开发者参与&#xff0c;代码…