c# - Wcf 方法接口作为参数在客户端被视为对象
问题描述
我在 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 { 获取;放; } }
注意:stackoverflow 上有很多关于接口参数和 wcf 的类似问题。但他们都告诉使用 ServiceKnownType 属性和 KnownTypeAttribute(我这样做了)。但它仍然给客户端的调用方法一个对象作为参数类型,而不是我的接口类型。
解决方案
你好,
你不能那样做。DataContract 表示客户端和服务之间传输的数据的定义。这个定义被转换成 XSD,它描述了交换的 XML(序列化数据契约对象)的格式。XML 只能传输数据而不是逻辑,它不会传输有关数据合约实现的任何信息 = 没有继承,也没有接口实现。如果您想在客户端上使用带有接口的数据契约,您必须在程序集中共享该数据契约(不仅是接口),并在生成服务代理时在客户端上重用它。
最好的问候, 拉迪斯拉夫