如何在WCF客户端中使用DataContractAttribute修饰的类中的方法?

时间:2010-07-22 16:46:37

标签: .net wcf metadata datacontract

3 个答案:

答案 0 :(得分:2)

如果类型包含在项目中,WCF将允许重复使用这些类型。如果您的数据类型位于某个Common项目中,那么这些类型将被重新序列化(只要它们具有默认构造函数并标记为序列化)。

这只是你问题的一半。如果您希望您的数据类型代理服务器方法调用实现,那么您可能需要远程处理(http://msdn.microsoft.com/en-us/library/ms973857.aspx)并使用代理对象。

答案 1 :(得分:0)

你做不到。

你需要保持两个完全分开的东西:

  • 您有服务合同,用于定义方法(使用[OperationContract]属性修饰)

  • 这些方法可能需要使用[DataContract]属性定义的类类型

WCF的本质是从客户端到服务器的参数和类型被序列化为XML表示 - 所以你可以通过数据合同形式发送的所有数据都是原始数据 - 没有行为 - 您无法通过DataContract类发送并在其上调用方法。

在正常设置中,您的客户端数据类甚至与服务器端的类型不同 - 它们只是看起来的XML序列化格式。他们共享的只是他们的XML序列化 - 被序列化的数据元素,仅此而已。 WCF 某些远程过程调用方法 - 它在客户端和服务器之间发送仅数据消息(这是好东西!(tm))。

如果您需要能够调用方法,请将该方法添加到服务合同,作为使用[OperationContract]属性修饰的方法。

答案 2 :(得分:0)

如果原始FooAverage()没有任何禁止此的依赖项,您可以使用部分类定义扩展myWcfService.FooData并在客户端中定义FooAverage():

partial class FooData
{
  public double FooAverage() { return Math.Average(Numbers); }
}

但请记住,FooData是一个数据传输对象,因此没有任何私有状态,这意味着您无论如何都可以将所有数据放入非成员函数中:

double average = Math.Average(foodata.Numbers);