Wcf继承了模型

时间:2010-04-27 11:46:49

标签: wcf

[DataContract]
Base
{ 
     [DataMember]
     public int Id {get;set;}
}

[DataContract]
A : Base 
{
     [DataMember]
     public string Value {get;set;}
}

[ServiceContract]
interface IService
{
    [OperationContract]
    void SetValue (Base base);
}

有没有办法像下列样式一样使用服务:

new Service ().SetValue (new A ());

2 个答案:

答案 0 :(得分:1)

您标记了此WCF,因此我假设您要使用它。

您需要使用ChannelFactory连接到端点,然后打开该频道。

这不起作用:

new Service ().SetValue (new A ());

你需要做什么。像这样:

using (var scf = new ChannelFactory< IService >(<Binding>,<EndpointAddress>)
 {
   IService proxy = scf.CreateChannel();
   proxy.SetValue(new (A));
 }

这将返回一个实现IService接口的代理对象。您可以在此对象上调用SetValue。

答案 1 :(得分:0)

除了改变@Flo所指示的调用服务的方式之外,您还需要进行一些小的更改以准备Data Contract Serializer来处理继承层次结构。

最简单的方法是使用KnownTypeAttribute装饰Base。像这样,

[DataContract]
[KnownType(typeof(A))]
Base
{ 
     [DataMember]
     public int Id {get;set;}
}

[DataContract]
A : Base 
{
     [DataMember]
     public string Value {get;set;}
}