gpt4 book ai didi

wcf - 使用 WCF 序列化 POCO 代理

转载 作者:行者123 更新时间:2023-12-02 07:09:15 25 4
gpt4 key购买 nike

当我运行服务时出现异常:

服务器在处理请求时遇到错误。异常消息是“无法序列化 System.Data.Entity.DynamicProxies.Cosik_14C2... 类型的参数”(对于操作“GetCosik”,合约“ICosikService”),因为它不是确切的类型“Project.Domain.Entities.Cosik” ' 在方法签名中,并且不在已知类型集合中。为了序列化参数,请使用 ServiceKnownTypeAttribute 将类型添加到操作的已知类型集合中。有关更多详细信息,请参阅服务器日志。

我是 WCF 服务和 Entity Framework 的新手,非常感谢任何帮助/建议。

我正在使用 Entity Framework 4.1。使用代码优先,我创建了包含两个表的数据库:

[DataContract(IsReference=true)]
public class Cosik
{
[DataMember]
public int cosikID { get; set; }

[DataMember]
public string title { get; set; }

[DataMember]
public int DifficultyID { get; set; }
[DataMember]
public virtual Difficulty Difficulty { get; set; }
}

[DataContract(IsReference=true)]
public class Difficulty
{
[DataMember]
public int DifficultyID { get; set; }

[DataMember]
[Required]
public string NameToDisplay { get; set; }
}

接下来,我创建了 WCF 服务应用程序并将其设为 RESTful。下面是接口(interface)代码:

[ServiceContract]
public interface ICosikService
{
[OperationContract]
[ApplyDataContractResolver]
[WebGet(UriTemplate = "/cosik")]
Cosik GetCosik();
}

以及该契约(Contract)的执行

public class RecipeService : IRecipeService
{
//repository of Cosik entities - stores collection of all
//Cosik entities that can be queried from DB
private ICosikRepository cosikRepo;
...

public Cosik GetCosik()
{
Cosik c = cosikRepo.GetById(1);
return c;
}

我实现了ApplyDataContractResolverAttribute类:http://msdn.microsoft.com/en-us/library/ee705457.aspx并向 GetCosik 方法添加 [ApplyDataContractResolver] 注释。然而,这并没有帮助。

有什么我错过的建议吗?

最佳答案

不要开发自定义解析器,而是关闭代理创建。代理不适用于 WCF 等场景,因为在序列化期间必须关闭延迟加载,并且从不使用动态更改跟踪:

context.Configuration.ProxyCreationEnabled = false;

关于wcf - 使用 WCF 序列化 POCO 代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8901017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com