序列化类时的NetDispatcherFaultException

时间:2013-04-17 16:22:10

标签: c# .net wcf

我有这个课程:

public class Container
{
  public IEventQueue GetEventQueue(){returns a DerivedEventQueue}
}

ComVisible(true), ComDefaultInterface(typeof(IEventQueue ))]
   [ClassInterface(ClassInterfaceType.None)]
   [Guid("XXX-XXX-XXX-XXX")]
   [ProgId("XXXX")]
   [DataContract]
   [KnownType(typeof(DerivedEventQueue))]
   public EventQueue: IEventQueue
   {
      public MyEvent GetEvent(){...}
   }


 [DataContract]
 [KnownType(typeof(DerivedEventQueue))] //doesnt matter if I have this line or not, I got the same error
//[System.Serializable]
  public class DerivedEventQueue: EventQueue, IEventSink
  {
   ...
  }

当我调用GetEventQueue时,我得到以下异常:

System.ServiceModel.Dispatcher.NetDispatcherFaultException:格式化程序在尝试反序列化消息时引发异常:尝试反序列化参数XXXX时出错:GetEventQueueResult。 InnerException消息是'Element'XXXX:GetEventQueueResult'包含'XXX:DerivedEventQueue'数据协定的数据。反序列化器不知道映射到此合同的任何类型。将与“DerivedEventQueue”对应的类型添加到已知类型列表中 - 例如,通过使用KnownTypeAttribute属性或将其添加到传递给DataContractSerializer的已知类型列表中。有关更多详细信息,请参阅InnerException。 ---> System.Runtime.Serialization.SerializationException:元素'XXXX:GetEventQueueResult'包含'XXXX:DerivedEventQueue'数据协定的数据。反序列化器不知道映射到此合同的任何类型。将与“DerivedEventQueue”对应的类型添加到已知类型列表中 - 例如,通过使用KnownTypeAttribute属性或将其添加到传递给DataContractSerializer的已知类型列表中。

DerivedEventQueue位于基类的KnownType属性中,因此我不知道为什么会出现此异常。 谁能告诉我为什么我得到这个例外? 谢谢!

1 个答案:

答案 0 :(得分:0)

我想在服务级别添加已知类型的aytribite。

此外,我认为错误来自您返回的界面,因为wcf不知道如何反序列化它。

有关已知类型的详细信息,另请参阅http://msdn.microsoft.com/en-us/library/ms730167.aspx