【问题标题】:Entity framework serialization error prevents wcf service from working实体框架序列化错误阻止 wcf 服务工作
【发布时间】:2013-07-18 00:30:00
【问题描述】:

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

这失败了:

var service = new ExceptionsJSONService();

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

然后我检查了svclog文件,发现有错误。异常类型为:

System.Runtime.Serialization.InvalidDataContractException, System.Runtime.Serialization,版本=4.0.0.0,文化=中性, PublicKeyToken=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 之后立即发生异常。

有人遇到过这种情况吗?

【问题讨论】:

    标签: .net json wcf entity-framework


    【解决方案1】:

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

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

    从函数中删除 Operation Contract 属性解决了该问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      相关资源
      最近更新 更多