实体框架序列化错误阻止wcf服务工作

时间:2013-07-18 00:30:01

标签: .net json wcf entity-framework

我有一个名为ExceptionsJSONService的WCF服务。与我的解决方案中定义的所有其他服务不同,它不能出于某种原因在javascript中实例化客户端。

这失败了:

var service = new ExceptionsJSONService();

预期对象。我一直试图弄清楚为什么会发生这种情况并在整个项目中检查我的所有定义,一切看起来都很好,并且与我已经定义的所有其他服务一致(这一切都有效)。

然后我检查了svclog文件,发现错误。例外类型是:

  

System.Runtime.Serialization.InvalidDataContractException,   System.Runtime.Serialization,Version = 4.0.0.0,Culture = neutral,   公钥= b77a5c561934e089

异常消息是:

  

键入' System.Data.Entity.DbSet`1 [CCMModel.AttachmentDoc]'不可能是   序列化。考虑使用DataContractAttribute标记它   属性,并标记要用序列化的所有成员   DataMemberAttribute属性。如果类型是集合,请考虑   使用CollectionDataContractAttribute标记它。见   其他受支持类型的Microsoft .NET Framework文档。

CCMModel是命名空间,AttachmentDoc是我的实体之一。但问题不在于AttachmentDoc。它只是按字母顺序浏览实体列表。我将一个实体从Attachments重命名为RAttachments,它只是继续使用AttachmentDoc抛出异常。

问题是,我的代码中没有任何地方可以尝试序列化任何EF实体。我序列化的所有类都有DataContracts。我认为这两者相关的原因是在Open ServiceHost' ExceptionsJSONService'之后发生异常。出现在svclog中。

以前有人遇到过这个吗?

1 个答案:

答案 0 :(得分:0)

问题是由ExceptionsJSONService类中定义的公共函数引起的。该功能应该是公开的,但它也被标记为操作合同。

在函数的参数列表中是我们的EF DB上下文对象。因为它位于操作合同的参数列表中,所以它使服务搜索与数据库上下文关联的所有实体的数据合同。这导致抛出只出现在服务跟踪日志中的异常。该异常阻止了服务正确加载,所以当我尝试在javascript中实例化服务客户端时,它会失败。

从功能中删除“操作合同”属性解决了问题。