Wcf和接口作为参数

我有一个库,其中包含一些共享相同界面的实体。 客户和服务共享此程序集。 现在我想知道是否有办法在我的服务合同中将此接口类型作为参数,以便我可以对实现接口的所有类使用相同的方法。

实体itselve都使用datacontract-attribute及其成员使用datamember属性进行修饰。

它有可能吗? 可能与NetDataContractSerializer ? 我知道我可以用基类(一些抽象类,例如)和知识类型 – 属性来做,但我肯定更喜欢接口作为对象的标识符,因为它在客户端应用程序中广泛使用,并将简化开发。

谢谢

我在OperationContracts的实现中使用ServiceKnownType属性解决了问题。

在告诉实现接口为ServiceKnownType的类时,可以将接口用作参数,因此只要它们是可序列化的,就可以使用实现接口的所有类。 (查看JuvalLöwy的“编程WCF服务”,第100页)

在常规的“mex”下肯定是不可能的。 它可能与汇编共享,但我真的不推荐它 – 你正在与WCF战斗:它会很脆弱等等。当然,你总是可以在你的对象模型中掩盖它 – 即不是调用[OperationContract]方法直接将其抽象为一个隐藏WCF细节的包装器方法(可能使用不同的对象进行数据传输而不是实际返回)。

[我刚读完你的答案,意识到你是专门询问服务方法的参数。 我会留下我的评论,以防它们仍然有用。]

我所知道的项目,我知道我在电线的两侧都有WCF,就像这样:

仅包含共享接口的库,例如:

namespace SharedInterfaces { public interface ICompositeType { bool BoolValue { get; set; } string StringValue { get; set; } } } 

WCF服务库,[DataContract](POCO)实现共享接口。

 [DataContract] public class CompositeType : ICompositeType { bool boolValue = true; string stringValue = "Hello "; [DataMember] public bool BoolValue { get { return boolValue; } set { boolValue = value; } } [DataMember] public string StringValue { get { return stringValue; } set { stringValue = value; } } } 

在服务客户端中,每个代理POCO都可以“强制”使用部分类来实现共享的,部署的接口(无论如何,如果svcutil正确地完成了它的工作,它将会运行),并且你将能够编程到接口中。其余的客户代码:

 namespace ServiceClient.ServiceReference1 { public partial class CompositeType : ICompositeType { } } 

如果要添加客户端可以使用的一些其他属性或方法(例如,MVP或MVVM模式中的Presenter或ViewModel概念),则此部分也很有用。