如何*正确*使用WCF的接口类型?

时间:2011-05-28 21:56:06

标签: .net wcf interface

更具体地说,问题是: 如何使用属性签名中具有(必须具有)接口类型的WCF来序列化类,因为它实现了接口?

这是一个设计问题。我不是在寻找黑客。 目的是使接口定义与实现类分开,因此不要让接口引用实现类。

我知道我们不应该传递与WCF和。的接口 还有(不可互操作的)方法(比如使用NetDataContractSerializer或ServiceKnownType属性),但这给我留下了一个问题:是否有一种正确的方法来使用基于WCF接口的类,或者这不应该是尝试了什么?

2 个答案:

答案 0 :(得分:4)

序列化基本上是关于传输数据。接口是关于描述行为。从根本上说,这两件事情是完全正交的,IMO。

你可以可能使它与[KnownType(...)]一起使用 - 如果你在每一端使用相同的确切类型(汇编共享),它肯定会有所帮助,但这非常非便携式的。

如果您正在使用 portability 的惯用WCF,那么您应该将自己局限于简单的数据协定,这对于只知道WSDL的客户来说是有用的。

那就是说,当我觉得适合我的时候,我毫不犹豫地折磨和滥用WCF; p

答案 1 :(得分:3)

我找到了解决我自己特定问题的方法。

问题在于我将属性(接口类型)标记为DataMember。通过将相应的私有成员标记为DataMember(并确保它们的类型是具体类),问题得以解决。

示例:

[DataContract()]
public class Company : ICompany
{
    [DataMember(Name = "Employees")]
    private EmployeeList _employees;

    public IEmployeeList Employees { get { return _employees; }}
}