WCF现实世界的应用,不仅是Hello World —— 在.NET Core领域重新审视

背景

WCF适用于真实世界,而不仅仅是Hello World是一篇2012年发表的文章。根据该文章的下载来源,这个GitHub仓库是针对.NET Framework 4.8的,还提供了一些.NET Core的示例。

引言

根据”Client Support for Calling WCF/CoreWCF with System.ServiceModel 6.0 Is Here!”的说法,微软没有完全支持WCF的承诺,但是:

  1. 快速但不是很脏的实现WCF客户端库,还有一些NuGet包
  2. 社区项目CoreWCF

.NET Core WCF客户端示例

请关注以下csproj项目:

  1. RealWorldServiceCoreClientApi.csproj
  2. TestRealWorldCoreIntegration.csproj

然而,不同于.NET Framework的对应部分,app.config不再被使用,这个配置文件会导致xUnit VS运行器失败。所以我已经在System.ServiceModel.ClientBase中硬编码了绑定和地址。然而,在实际的应用程序中,你应该很容易创建一个基于appSettings.json的应用级json配置,并使用应用代码来实例化相应的绑定。

注意事项

ClientBase(string endpointConfigurationName)

由于.NET Core不再使用app.config,这个构造函数只是一个无法在你的.NET Core客户端应用程序中真正使用的僵尸函数原型。显然,根据问题#5358,微软已经开始终止这个僵尸。

WCF的美好时光

我怀念那些和WCF一起度过的美好日子。在过去的15年里,微服务一直很炙手可热。然而,理论上来说,当我开发WCF服务时,我其实已经在隐式地构建微服务:

  1. 作为开发人员,我构建WCF服务库。
  2. 发布后,IT人员会通过调整配置文件app.config来决定如何部署这些服务库:
    • 不同主机上的不同服务库组合
    • 不同的绑定
    • 不同的安全性
    • 版本控制

通过”.NET Framework Runtime”和”WCF Services / XXX Activation”来处理剩下的工作。而.NET Runtime可以生成仅向前的非缓存XML解析器/编写器来处理SOAP流。

并且在一个复杂的企业环境中,你可能有Biztalk,其中WCF组件是一等公民。

然而,不管是好还是坏,事情总是不断发展的。创建新的WCF服务的工作肯定已经在下降,尽管像PPSR和eRx这样的现有WCF服务多年来仍然得到良好维护,而且与这些SOAP服务交互的新业务客户端应用程序仍在不断涌现。

WCF客户端中的缺陷仍然存在

请查看:

根据问题#4912,这个缺陷还没有修复,所以你可能仍然需要我在2011年提出的解决方法。

历史

  • 2023年11月21日:初始版本

Leave a Reply

Your email address will not be published. Required fields are marked *