前言
CoreWCF 项目团队发布了 CoreWCF 的 1.0 版本,这是 WCF 到 .NET Core 平台的移植。
我觉得,CoreWCF 适用于这类场景使用——基于 WCF 的旧版应用程序已在 Windows 平台上运行了很多年,但是希望将代码迁移到 .NET Core,以利用 Linux 的性能、节约成本。
那么,将旧版 WCF 应用程序迁移到 CoreWCF,到底需要多大工作量呢?
下面,我们用微软提供的 TodoWCF 示例[1]进行演示。
迁移流程
1. 验证现有服务
在迁移到 CoreWCF 之前,我们首先使用以下步骤测试 WCF 应用程序:
在 Visual Studio 中打开示例应用程序的
TodoWCFService.sln
生成解决方案以验证它是否成功编译
运行解决方案以启动服务
创建客户端应用程序,输出
TodoItem.Name
TodoServiceClient client = new TodoServiceClient();
foreach (var item in client.GetTodoItems())
{Console.WriteLine(item.Name);
}
2. 使用升级助手升级应用程序
在命令提示符下,运行以下命令安装升级助手工具:
dotnet tool install -g upgrade-assistant
运行以下命令以开始升级项目:
upgrade-assistant upgrade TodoWCFService.csproj
碰到提问,一律选1
:
升级完成后,在 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 支持,不影响功能:
客户端无需修改代码,只需修改服务地址,即可正常使用:
结论
从上述过程来说,将旧版 WCF 应用程序迁移到 CoreWCF 的代价很小,有相关迁移需要的朋友可以尝试一下。
添加微信号【MyIO666】,邀你加入技术交流群
参考资料
[1]
TodoWCF 示例: https://github.com/xamarin/xamarin-forms-samples/tree/main/WebServices/TodoWCF