在这里输入代码我想用.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[]
,Array
,List<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");
}
}
}
有没有办法发送动态类型?或者我想做一些完全错误的事情?
提前致谢。
答案 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