ane*_*afr 5 wcf serialization poco entity-framework-4.1
当我运行我的服务时,我得到了异常:
服务器遇到处理请求的错误.异常消息是'无法序列化System.Data.Entity.DynamicProxies.Cosik_14C2类型的参数...'(对于操作'GetCosik',合同'ICosikService'),因为它不是确切的类型'Project.Domain.Entities.Cosik '在方法签名中并且不在已知类型集合中.为了序列化参数,请使用ServiceKnownTypeAttribute将类型添加到操作的已知类型集合中.请参阅服务器日志以获取更多详
我是WCF服务和实体框架的新手,我很感激任何帮助/建议.
我正在使用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; }
}
Run Code Online (Sandbox Code Playgroud)
接下来,我创建了WCF服务应用程序并使其成为RESTful.以下是界面代码:
[ServiceContract]
public interface ICosikService
{
[OperationContract]
[ApplyDataContractResolver]
[WebGet(UriTemplate = "/cosik")]
Cosik GetCosik();
}
Run Code Online (Sandbox Code Playgroud)
并执行该合同
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;
}
Run Code Online (Sandbox Code Playgroud)
我在http://msdn.microsoft.com/en-us/library/ee705457.aspx上实现了ApplyDataContractResolverAttribute类,并在GetCosik方法中添加了[ApplyDataContractResolver]注释.但是,它没有帮助.
有什么建议我错过了吗?
不要开发自定义解析器,而是关闭代理创建。代理不适用于 WCF 等场景,因为在序列化期间必须关闭延迟加载,并且永远不会使用动态更改跟踪:
context.Configuration.ProxyCreationEnabled = false;
Run Code Online (Sandbox Code Playgroud)