常见的WCF对象支持类

时间:2009-09-21 23:24:26

标签: c# wcf reference structure

我很困惑如何添加/包含/引用涉及WCF的服务器和客户端项目所需的一组支持类。

在我的C#解决方案中,我有:

  • 执行服务器类型填充的服务器项目
  • 做gui类型的客户项目
  • 包含网络传递数据对象的类定义的WCF库

Server项目使用常规引用来包含WCF库。 Client项目使用对WCF库的服务引用。

我的问题是我在服务器和客户端项目中都需要几个实用程序类,它们使用WCF库中包含的对象定义。我不希望在服务器和客户端项目中放置这些类的两个(相同)副本 - 我宁愿只维护一个副本。这会建议使用类库,但引用如何工作呢?这个新类库将具有对WCF库的标准引用,然后服务器和客户端项目必须依次标准引用这个新类库。但是,客户端项目现在不会有两个不同定义的WCF库中包含的数据对象类的定义吗?如何包含这些实用程序类?

1 个答案:

答案 0 :(得分:1)

使用服务引用方法可以避免使用WCF,因为它会为您生成代码,从而简化您在早期WCF日的生活。但是,随着您越来越习惯于使用WCF并且您意识到服务引用实际上正在做什么,您开始意识到服务引用方法有时更多是一种障碍而不是帮助。

例如,就我而言,我有一个由三个不同项目使用的WCF服务 - 两个C#项目和一个托管C ++项目。每次我更新WCF服务接口时,我都必须在这三个项目中重新生成服务引用。它很快就成了我的头疼。

此外(并且您遇到此问题),服务引用方法仅处理DataContract类的结构,而不是它们的行为。因此,如果向服务器端的DataContract类添加便捷方法,则必须在客户端手动添加该行为,因为它不通过元数据交换(MEX)操作传送。

那时我偶然发现了video。在其中,Miguel Castro提出了一个令人信服的案例,以避免完全使用服务参考方法。当你检查他的论点时,它确实很有道理。

根据他的建议,我建议将您的DataContract类及其上运行的类放在Client和Server直接引用的类库中(无服务引用)。正如您将从视频中看到的那样,自己编写客户端代码非常简单,只需在WCF界面更改时更新它。

我现在已经使用这种方法几个月了,我发现解决方案比使用WCF的方式更灵活,而不是使用服务引用方法。