2009-09-21 75 views
0

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

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

  • 服务器项目做服务器类型的东西
  • 一个客户项目做GUI类型的东西
  • 一个WCF图书馆网络包含的类定义传递的数据对象

Server项目使用正常的引用来包含WCF库。客户端项目使用对WCF库的服务引用。

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

回答

1

使用服务引用方法需要一些初始使用WCF的原因,因为它会为您生成代码,以简化您在WCF早期的生活。然而,随着您越来越习惯于使用WCF,并意识到服务参考实际上在做什么,您就会开始意识到服务参考方法有时不仅仅是一种帮助,而是一种阻碍。

例如,就我而言,我有一个WCF服务,它被三个不同的项目使用 - 两个C#项目和一个托管C++项目。每次我更新WCF服务接口时,我都必须在这三个项目的每一个中重新生成服务引用。它很快成为我的头痛。除此之外(你也遇到过这个问题),服务引用方法只处理DataContract类的结构,而不处理它们的行为。因此,如果将便利方法添加到服务器端的DataContract类中,则必须手动将该行为添加到客户端,因为它不是通过元数据交换(MEX)操作传送的。

那时我偶然发现video。其中,米格尔卡斯特罗提出了一个令人信服的案例,以避免完全使用服务引用方法。当你检查他的论点时,这确实很有意义。

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

我已经使用了这种方法几个月,我发现解决方案比使用服务引用方法更加灵活。