当前位置: 首页 > 知识库问答 >
问题:

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

赵锐
2023-03-14

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

  1. 服务接口
[ServiceContract]
[ServiceKnownType(typeof(MyObj))]
public interface IService
{
    [OperationContract]
    string GetData(IMyObj value);
}
public class Service : IService
{
    public string GetData(IMyObj value)
    {
        return string.Format("You entered: {0}", value.MyValue);
    }

}
public interface IMyObj
{
    int MyValue { get; set; }
}
[DataContract]
[KnownType(typeof(IMyObj))]
public class MyObj : IMyObj
{
    [DataMember]
    public int MyValue { get; set; }
}

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

共有1个答案

田镜
2023-03-14

对于遇到相同问题的其他人。我从拉迪斯拉夫那里找到了这个答案 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

你好

你不能这样。DataContract表示客户端和服务之间传输的数据的定义。该定义被转换成描述交换XML(序列化数据契约对象)格式的XSD。XML只能传递数据,不能传递逻辑,不传递任何关于数据契约实现的信息=没有继承,没有接口实现。如果您想在客户端上使用datacontract和接口,您必须在程序集(不仅仅是接口)中共享该数据协定,并在生成服务代理时在客户端上重用它。

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

 类似资料:
  • 问题内容: 我几天前接受采访时,被问到这样的问题。 问:反向链接列表。给出以下代码: 我很困惑,因为我不知道接口对象可以用作方法参数。面试官解释了一下,但我仍然不确定。有人可以启发我吗? 问题答案: 实际上,这是使用接口的最常见和最有用的方法之一。该接口定义了一个契约,您的代码可以与实现该接口的任何类一起使用,而无需了解具体的类- 它甚至可以与编写代码时尚不存在的类一起使用。 Java标准API中

  • 在编写了自己的通用功能接口并将其用于lambdas之后,我必须在一种新方法中使用它: 将通用数组作为输入处理,检查其最小长度是否为4 处理我的功能界面的任何实例 处理lambda表达式的任何实例,该表达式接受一个参数,但不返回任何内容 应用于函数接口实例的结果(这里我想我必须使用使用者) 以前从未使用过函数接口,有人能解释一下我应该如何将2个函数接口作为方法参数传递吗? 例如:

  • 问题内容: 我不知道为什么此代码在PHP中不起作用? 看来它没有违反任何OOP规则,但是为什么它给我一个错误? 问题答案: 它 确实 违反了SOLID规则。您声明接受一个类型的参数,但子级接受一个类型的参数。即使是的子类型,它仍然是不同的类型。 当上课的时候,上课也是正确的。但是接受一个,但是不接受一个。因此,据推测,但不接受type参数。这打破了Liskov替代原则。您不能在子接口,周期中更改参

  • 问题内容: 我是Go编程语言的新手,最近遇到了以下代码: 但是,我不理解函数签名背后的含义。它接受接口作为参数。你能解释一下这是怎么回事吗?谢谢 问题答案: Go使用接口来泛化类型。因此,如果您想要一个带有特定接口的函数,则可以编写 可以将满足的每种类型传递给。 现在,可以如下所示: 为了满足,实现它的类型必须实现。 但是,如果您需要一个空接口(),则该对象不需要实现要传递给该函数的任何方法: 上

  • 我正在使用Camel开发客户端/服务器请求/回复系统。 客户机和服务器使用两个JMS队列进行通信:请求队列和响应队列。 服务器端有一个camel路由,它使用来自请求队列的JMS消息并同时处理消息。使用响应队列将响应发送回客户端。 客户端向JMS队列发送消息并等待响应。我有两个问题: > 客户端实际上是其他应用程序将使用的库。我也想在客户端使用Camel,但不知道如何将Camel用作“函数”,即在我

  • 问题内容: 有没有一种方法可以将angularJS用作SOAP客户端或开发ng SOAP客户端服务? 问题答案: 当然。您所需要做的就是在JavaScript上实现SOAP调用。