【问题标题】:Consuming WCF service from Business Logic Layer从业务逻辑层使用 WCF 服务
【发布时间】:2018-08-02 02:26:53
【问题描述】:

我有一个具有以下结构的解决方案:

  1. 域 (.NET 4.6.1)
  2. DAL (.NET 4.6.1)
  3. BLL (.NET Core 2.0)
  4. API (.NET Core 2.0)

我需要将数据提交到外部 WCF 服务。我个人对 WCF 没有太多经验,因为我一直在使用 REST API。因此,为了尝试使用 WCF 服务,我在其中设置了一个 .NET 核心控制台应用程序,并为其添加了一个连接的服务引用。这导致生成了具有以下类的Reference.cs

  • IWebService
  • IWebServiceChannel
  • 发送响应
  • 获取响应
  • WebServiceClient(实现 IWebService)

我正在考虑在 BLL 层创建一个 SubmissionService 类来向 WCF 服务提交数据,因此我将 IWebService 从控制台应用程序移动到 BLL 层以注入到类中并执行单元测试。 IWebService 上定义的属性需要对 System.ServiceModel 的引用,它带有很多包袱,在我的 BLL 层中引用它没有意义。

我不确定将 WCF 客户端放在我的项目结构中的哪个位置。我一直在调查这个问题,我能想到的唯一可行的解​​决方案是纯粹为 WCF 客户端创建一个类库项目,并在我的 BLL 层中引用它以访问 IWebService 并模拟它以进行测试。有没有人遇到过同样的情况?非常感谢任何帮助。

【问题讨论】:

    标签: c# unit-testing wcf dependency-injection .net-core


    【解决方案1】:

    您缺少一个“层”,即Composition Root。 (更详细的解释见section 4.1 of this book)。

    您可以定义自己的特定于应用程序的抽象,以允许 BLL 与 WCF 服务(通过该抽象)进行通信。该抽象可以位于 BLL 中。

    在您的组合根中,您可以使用 WCF 客户端在调用 WCF 服务的特定于应用程序的抽象之上创建一个适配器,该客户端也可以在组合根中生成。

    【讨论】:

      猜你喜欢
      • 2011-01-20
      • 2011-07-21
      • 2012-01-13
      • 2017-08-08
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 2013-05-18
      • 1970-01-01
      相关资源
      最近更新 更多