Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wcf固有模型_Wcf - Fatal编程技术网

Wcf固有模型

Wcf固有模型,wcf,Wcf,有没有一种方法可以像以下样式一样使用该服务: [DataContract] Base { [DataMember] public int Id {get;set;} } [DataContract] A : Base { [DataMember] public string Value {get;set;} } [ServiceContract] interface IService { [OperationContract] vo

有没有一种方法可以像以下样式一样使用该服务:

[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);
}

你标记了这个WCF,所以我认为你想使用它

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

这是行不通的:

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

你需要做smth。像这样:

new Service ().SetValue (new A ());
使用(var scf=newchannelfactory(,)
{
IService proxy=scf.CreateChannel();
proxy.SetValue(新的(A));
}

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

除了更改@Flo所指示的调用服务的方式外,还需要进行一些小的更改,以准备数据协定序列化程序来处理继承层次结构

做这件事最简单的方法就是用…来装饰底座

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

是的,但是通过这种knowntype方式;对于我添加的所有新类,我也在base中添加了knowntype。这是真的-但是看看Davy Brion的已知类型提供程序:
[DataContract]
[KnownType(typeof(A))]
Base
{ 
     [DataMember]
     public int Id {get;set;}
}

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