【发布时间】:2021-12-24 23:21:50
【问题描述】:
我有这个古老的受诅咒的遗留意大利面条代码库,是我在工作场所继承的。 它由多个 Windows 服务和几个 GUI 组成。所有项目都针对 .NET Framework 4。某些东西(不同的项目针对不同的版本),因此很明显,它们仅适用于 Windows。
我很难在 .NET 3.1(现在它已经发布,6.0)中从头开始重写它,因为我发现这将是避免发疯的最快和更好的选择(它真的那么糟糕),因为这是安装在嵌入式机器中的,每台机器的 Windows 许可证很昂贵。
现在,由于这些服务以 .NET Framework 为目标,因此只有 Microsoft 的东西,它们使用 Windows 通信基础; 或者至少我很确定他们会这样做,因为其中一个公共接口有this attribute
[ServiceContract(Name="Service",Namespace="http://tempuri.org/")]
(写得一模一样。尽管tempuri这个东西正在生产中)
这些应用程序也可以安装在用户的计算机上(特定的管理 GUI),并且鉴于这些 WCF 服务也有安装在用户的 Windows 计算机上的第 3 方消费者,因此更改公共 WCF API 是一种不行。
我重新开发了(更好地)完全与以前的代码库完全相同的堆栈,但现在我不知道如何在 .NET 6.0 中重新创建 WCF 服务,因为 WCF 是一个 Windows - 仅限 .NETFramework 特定技术。
我对这个问题的看法是创建一个新的 gRPC/REST 服务并拥有一个专门用于兼容性的辅助翻译器/适配器 .NET Framework 服务,因为到目前为止,第 3 方消费者仅安装在 Windows 机器中。 (我确实有一些裸文档和 .wsdl,所以我可以毫无问题地重新创建它。还有意大利面条源代码)
但也许存在更好的解决方案: 有没有办法在 .NET Core 中重新创建与 WCF 兼容的服务器?我应该坚持使用适配器服务吗?将 .NET Standard 2.1 用于业务逻辑并让 .NET Framework 服务使用它?或者有没有更好的解决方案我没有看到?
提前感谢所有愿意花时间阅读和回答的人。
【问题讨论】:
标签: c# wcf .net-core compatibility software-design