2014-04-15 23 views
1

在此输入代码我想用.asvc web服务发送动态类型。我有一门课有一些属性。我想发送任何类型的对象,甚至在这个列表中的类。并回到客户端。是否可以在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等,但我得到这个错误。 “ ”底层连接已关闭:连接意外关闭。“

顺便说一句,对于所有非特定对象类型,服务参考类表示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"); 
       } 
      } 
     } 

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

在此先感谢。

回答

1

你必须返回一个已知类型。它不能仅返回“对象”或甚至是一个接口。如果没有数据合同,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

这可能让你在这个问题上有所帮助手头

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

虽然不支持通用方法,但为了交换数据​​,可能会公开通用对象。但是, 有一些限制。让我们来仔细看看:

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

相关问题