答案 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);