【发布时间】:2012-11-06 06:55:22
【问题描述】:
试图传递“复杂”类类型,其中包含带有接口和接口/类列表的原始类型。
我猜有问题的成员是:
public List<IMyInterface> IntrfList
运行时错误:
接收对 http:/localhost/xxxxxx/xxxxxxService.svc 的 HTTP 响应时出错。这可能是由于服务端点绑定未使用 HTTP 协议。这也可能是由于服务器中止了 HTTP 请求上下文(可能是由于服务关闭)。有关详细信息,请参阅服务器日志。
来自 MS 服务跟踪查看器 (SvcTraceViewer) 的描述性错误:
无法序列化类型“myType”。考虑使用 DataContractAttribute 属性对其进行标记,并使用 DataMemberAttribute 属性标记您想要序列化的所有成员。如果该类型是一个集合,请考虑使用 CollectionDataContractAttribute 对其进行标记。有关其他支持的类型,请参阅 Microsoft .NET Framework 文档。
我按照解释的建议做了,但没有帮助。
“共享”类:
[System.Runtime.Serialization.DataContract]
public class ServerState
{
private Queue<IJob> _mWaitingQueue;
public Queue<IJob> mWaitingQueue
{
get
{
lock (_LockObjWaiting)
{
return _mWaitingQueue;
}
}
private set
{
_mWaitingQueue = value;
}
}
private object _LockObjWaiting = new object();
private List<IJob> _mInPrograssList = new List<IJob>();
[DataMember]
public List<IJob> mInPrograssList
{
get
{
return _mInPrograssList;
}
private set
{
_mInPrograssList = value;
}
}
}
IJob 是一个接口。 IJob 的结构是这样的:
IJob (Interface)
- JobBase (Abstract class)
- JobA (Driven from JobBase)
- JobB (Driven from JobBase)
【问题讨论】:
-
你能粘贴你的类 myType 吗?它的数据注释可能有问题。
-
“myType” ==
ServerState也是如此?IJob实现也需要序列化。它们是可序列化的吗? -
另外,至少在这个示例中,您对锁的使用是有问题的。
-
是的,“myType”是 ServerState。是的,不应该在 DataMember 类型属性中使用锁。
标签: c# wcf serialization exception-handling datacontract