将旧版 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值