是否可以在Web服务中使用对象?

时间:2014-04-15 11:40:18

标签: c# web-services generics svc

在这里输入代码我想用.asvc web服务发送动态类型。我有一个类有一些属性。我想在这个列表中发送任何类型的对象甚至类。然后回到客户端。

我的意思是我总是想要使用SysResult类型。但有时使用List<Apple>,有时使用List<Orrange>

喜欢吼叫

    [Serializable]
    public class SysResult
    {
        public int CRCResult;
        public long CRCTransactionId;
        public bool CRCStatus;
        public string CRCMessage;
        public List<Anything> ListObject;
    }

我尝试使用object[]ArrayList<object>dynamic等。但我收到此错误。 “基础连接已关闭:连接意外关闭。”

对于所有非特定对象类型,服务referance类代表object[]类型。

  [System.Runtime.Serialization.DataMemberAttribute(IsRequired=true)]
        public object[] ListObject {
            get {
                return this.ListObjectField;
            }
            set {
                if ((object.ReferenceEquals(this.ListObjectField, value) != true)) {
                    this.ListObjectField = value;
                    this.RaisePropertyChanged("ListObject");
                }
            }
        }

有没有办法发送动态类型?或者我想做一些完全错误的事情?

提前致谢。

2 个答案:

答案 0 :(得分:2)

您必须返回已知类型。它不能仅仅返回&#34; object&#34;甚至是一个界面。如果没有datacontract,wcf将如何知道在客户端上将对象序列化为什么?

  

通常,在客户端之间传递参数和返回值时   和服务,两个端点共享的所有数据合同   要传输的数据。但是,以下情况并非如此   情况:

     

...   要传输的信息的声明类型是Object。   因为每个类型都继承自Object,所以无法知道   提前实际发送了哪种类型,接收端点不能   事先确定传输数据的数据合同。

http://msdn.microsoft.com/en-us/library/ms730167(v=vs.110).aspx

另外

您可以使用KnownTypes映射您的接口和对象。看看这个链接: WCF - Object as known type -> interoperable? WCF, Interface return type and KnownTypes

答案 1 :(得分:1)

这可能会为您提供一些帮助

  

WCF不支持使用通用方法进行服务操作。   换句话说,只有具体类型可用于服务   操作。不能使用开放泛型类型。现在,这很重要   澄清这不是WCF的限制。相反,它是一个   WSDL的限制,用于将服务元数据公开给   消费者。 WSDL中没有用于定义泛型的构造   类型。一般来说,我同意这种行为   减少客户端和服务之间的耦合。

     

虽然不支持通用方法,但可以公开   用于交换数据的通用对象。但是,那里   是一些限制。让我们仔细看看:

http://jeffbarnes.net/blog/post/2007/05/10/WCF-Serialization-and-Generics.aspx