两个WCF服务将同一实体暴露为两个不同的类

时间:2013-08-07 00:22:55

标签: wcf datacontract

我们的WCF服务解决方案包含三个项目:

  1. 业务逻辑(AddressChangeBL& AddressBL
  2. 实体(POCO)(Address
  3. 服务(AddressChangeService& AddressService
  4. 现在,服务项目有两个独立的服务,每个服务都暴露同一个实体。当我在ASP.Net应用程序中引用服务时,通过两个不同的名称空间引用相同的实体(AddressChangeService.Address& AddressService.Address

    在我的代码中,我需要向两个服务发送Address实体。首先是AddressService.IsValid方法,然后是AddressChangeService.UpdateAddress方法。

    尽管在服务中,Address实体是同一个类,但在ASP.Net应用程序中它们是两个不同的类。

    如何解决此问题?

    我知道几个解决方法,但没有一个对我们有好处:

    1. 使用Entities程序集直接添加对实体的引用,而不是通过服务。这对我们来说不是一个可接受的解决方案,因为我们的要求要求我们使用WSDL创建的实体。
    2. IsValid()方法从AddressService移至AddressChangeService。这是不可接受的,因为它违反了我们所希望的关注点分离。
    3. 我想要一个“解决方案”而不是“解决方法,如果可能的话。”

1 个答案:

答案 0 :(得分:1)

问题是这些课程有所不同。它们可能具有相同的签名,但它们是不同的(C#不是鸭子类型)。

原因是当您“引用”您使用“添加服务引用”的服务时。这样做是为了生成一组新的类来处理服务。由于您添加了两个服务,因此生成了两组类。

解决方案是在添加服务参考时使用“使用现有类型”选项(或类似的效果)。

但是,我不同意“关注分离”的说法。我会AddressChangeService继承AddressService