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

Posted

技术标签:

【中文标题】Wcf 方法接口作为参数在客户端被视为对象【英文标题】:Wcf method interface as parameter seen as object on clientside 【发布时间】:2020-02-19 19:01:54 【问题描述】:

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

    服务接口
[服务合同] [ServiceKnownType(typeof(MyObj))] 公共接口 IService [运营合同] 字符串 GetData(IMyObj 值);
    服务类
公共类服务:IService 公共字符串 GetData(IMyObj 值) return string.Format("您输入:0", value.MyValue);
    接口
公共接口 IMyObj int MyValue 得到;放;
    数据合约
[数据合约] [KnownType(typeof(IMyObj))] 公共类 MyObj : IMyObj [数据成员] 公共 int MyValue 获取;放;

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

【问题讨论】:

【参考方案1】:

对于遇到同样问题的其他人。我在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 表示数据的定义 在客户端和服务之间传输。这个定义被转换 到 XSD 中,它描述了交换的 XML 格式(序列化数据 合同对象)。 XML 只能传输数据而不是逻辑,它不能 传输有关数据合约实施的任何信息 = 否 继承和没有接口实现。如果你想使用 客户端上带有接口的数据合同,您必须共享该数据 组装合同(不仅是接口)并在 生成服务代理时的客户端。

最好的问候,拉迪斯拉夫

【讨论】:

以上是关于Wcf 方法接口作为参数在客户端被视为对象的主要内容,如果未能解决你的问题,请参考以下文章

WCF 客户端的默认属性值

WCF入门教程2——创建第一个WCF程序

WCF 异步方法调用返回响应对象

WCF设计服务协议

如何将xml参数发送到WCF?

如何序列化集合以使用 WCF 发送它?