Wcf方法接口作为参数,被视为客户端上的对象

问题描述 投票:0回答:1

我正在使用接口作为OperationContract中的输入参数。但是,当我在客户端生成代理类时,客户端方法被视为:GetDat(对象值)而不是GetData(IMyObj值)

  1. 服务接口
[服务合同][ServiceKnownType(typeof(MyObj))]公共接口IService{[运营合同]字符串GetData(IMyObj值);}
  1. 服务等级
公共类服务:IService{公共字符串GetData(IMyObj值){返回string.Format(“您输入的是:{0}”,value.MyValue);}}
  1. 接口
公共接口IMyObj{int MyValue {get;组; }}
  1. 数据合同
[数据合同][KnownType(typeof(IMyObj))]公共类MyObj:IMyObj{[DataMember]public int MyValue {get;组; }}

注:关于接口参数和wcf,关于stackoverflow也有很多类似的问题。但是他们都告诉要使用ServiceKnownType属性和KnownTypeAttribute(我做到了)。但是它仍然为客户端的调用方法提供了一个对象作为参数类型,而不是我的接口类型。

c# wcf serialization datacontract operationcontract
1个回答
0
投票

对于遇到相同问题的其他人。我在https://social.msdn.microsoft.com/Forums/vstudio/en-US/2c52251b-af7f-4529-a2ac-14418ca4b19d/wcf-service-reference-does-not-add-the-interface-definition-of-a-datacontract-of-a-class?forum=wcf]上从Ladislav找到了这个答案

你好,

您不能这样做。 DataContract代表数据的定义在客户和服务之间转移。这个定义已经转变到描述交换的XML(序列化数据)格式的XSD中合同对象)。 XML只能传输数据,而不能传输逻辑,它不能传输转移有关数据合同实施的任何信息=否继承,没有接口实现。如果要使用与客户端上的接口进行数据契约,您必须共享该数据装配合同(不仅是接口),并在客户生成服务代理时。

最诚挚的问候,拉迪斯拉夫

© www.soinside.com 2019 - 2024. All rights reserved.