我们有一个 .NET 4、WPF、WCF、EF 4、SQL 2008 应用程序。我们的 EF 模型之一是高度相关的,在我所描述的情况下,可能并且可能确实包含循环。我被要求对现场的一个案例进行故障排除,该案例中来自该 STE EF 模型的所有数据突然退出显示在 WPF 客户端中。经过仔细检查,我发现 IIS W3WP 进程在尝试检索(序列化)STE EF 对象图时崩溃。我使用调试诊断来捕获崩溃。
当我查看生成的崩溃报告时,我发现这是一个堆栈溢出异常(多么合适)。崩溃报告中的堆栈跟踪相当大,但堆栈顶部看起来像:
System.Xml.XmlBaseWriter.StartElement(System.String ByRef, System.String, System.String, System.Xml.XmlDictionaryString)
System.Xml.XmlBaseWriter.WriteStartElement(System.String, System.Xml.XmlDictionaryString, System.Xml.XmlDictionaryString)
System.Runtime.Serialization.XmlWriterDelegator.WriteStartElement(System.String, System.Xml.XmlDictionaryString, System.Xml.XmlDictionaryString)
DynamicClass.WriteXXXDataToXml(System.Runtime.Serialization.XmlWriterDelegator, System.Object, System.Runtime.Serialization.XmlObjectSerializerWriteContext, System.Runtime.Serialization.ClassDataContract)
System.Runtime.Serialization.ClassDataContract.WriteXmlValue(System.Runtime.Serialization.XmlWriterDelegator, System.Object, System.Runtime.Serialization.XmlObjectSerializerWriteContext)
System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithoutXsiType(System.Runtime.Serialization.DataContract, System.Runtime.Serialization.XmlWriterDelegator, System.Object, System.RuntimeTypeHandle)
System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(System.Runtime.Serialization.XmlWriterDelegator, System.Object, Boolean, Boolean, Int32, System.RuntimeTypeHandle)
System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerializeReference(System.Runtime.Serialization.XmlWriterDelegator, System.Object, Boolean, Boolean, Int32, System.RuntimeTypeHandle)
异常奇怪的是,当 WCF 服务托管在 Visual Studio 中并且我从开发环境中运行时,序列化工作完美,并且我在客户端上获取数据。
这可以通过 IIS 设置解决吗?为什么它可以与 Visual Studio 的开发 IIS 一起使用,但不能与生产 IIS 一起使用?
我不确定是什么导致了这个问题,或者为什么序列化器甚至在呕吐?
我应该尝试使用 STE EF4 的另一种 WCF 序列化方法吗?
任何输入表示赞赏。
谢谢!