我正在编写一个WCF服务来替换当前的Web服务,并且遇到了需要返回的传统复杂类型之一。与传统复杂类型一起使用WCF
不幸的是,我无法触及任何代码,但看着它们,所有的类都是可序列化的,当前的Web服务正在使用它,没有任何问题。
每当我的客户端调用WCF服务它得到一个通信异常,当我打开跟踪WCF这里的序列化错误,我发现:
类型“Common.Permission.ApplicationGroup”数据合同名称“ApplicationGroup:http://schemas.datacontract.org/2004/07/Common.Permission'不是预期的。将任何未知的静态类型添加到已知类型列表中 - 例如,使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中。
类型我要回是ApplicationPrincipal,但似乎在子类型进行倾倒。下面是这些类的样子:
类型我要回:
[Serializable]
[TypeConverter(typeof(ExpandableObjectConverter))]
public class ApplicationPrincipal :
IPrincipal, ISupportInitialize, IDeserializationCallback, IFormattable
{
private ApplicationIdentity m_identity;
private ApplicationGroupCollection m_groups;
private ConditionDictionary m_roleConditions;
和这里的ApplicationGroupCollection:
[Serializable]
public class ApplicationGroupCollection :
IList, IEnumerable, IFormattable, ISupportInitialize,
IDeserializationCallback, ICloneable, ICustomTypeDescriptor
{
/// <summary>
/// Occurs when a value is being changed in the collection.
/// </summary>
[field:NonSerialized]
public event CollectionChangeEventHandler CollectionChanging;
/// <summary>
/// Occurs when a value has been changed in the collection.
/// </summary>
[field:NonSerialized]
public event CollectionChangeEventHandler CollectionChanged;
最后,ApplicationGroup:
[Serializable]
[TypeConverter(typeof(ExpandableObjectConverter))]
public class ApplicationGroup :
ICloneable, ISupportInitialize, IDeserializationCallback, IFormattable
{
private int m_groupID;
private string m_groupName;
private string m_groupDesc;
private ConditionDictionary m_roleConditions;
任何建议,为什么WCF不能序列化ApplicationGroup?
感谢您的指点,我刚刚掌握了关于sarfaribooksonline的一本Juval Lowy的书(第2版甚至是!),我们将看看第3章并更熟悉WCF中的数据合同要求 – theburningmonk 2009-02-19 20:05:34