cuando corro mi servicio me dieron excepción:serialización POCO proxy con WCF
El servidor encontró un error al procesar la solicitud. El mensaje de excepción es 'No se puede serializar el parámetro de tipo System.Data.Entity.DynamicProxies.Cosik_14C2 ...' (para la operación 'GetCosik', contrato 'ICosikService') porque no es del tipo exacto 'Project.Domain.Entities.Cosik 'en la firma del método y no está en la colección de tipos conocidos. Para serializar el parámetro, agregue el tipo a la colección de tipos conocidos para la operación usando ServiceKnownTypeAttribute. '. Vea los registros del servidor para más detalles.
Soy nuevo en los servicios de WCF y en Entity Framework y agradecería cualquier ayuda/sugerencia.
Estoy usando Entity Framework 4.1. El uso de código primero creé base de datos con dos tablas:
[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; }
}
siguiente que creó la aplicación de servicio WCF y lo hizo REST. A continuación se muestra el código de interfaz:
[ServiceContract]
public interface ICosikService
{
[OperationContract]
[ApplyDataContractResolver]
[WebGet(UriTemplate = "/cosik")]
Cosik GetCosik();
}
y ejecución de dicho contrato
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;
}
he implementado clase ApplyDataContractResolverAttribute dada en: http://msdn.microsoft.com/en-us/library/ee705457.aspx y añadió [ApplyDataContractResolver] anotación a GetCosik método. Sin embargo, no ayudó.
¿Alguna sugerencia de lo que me he perdido?
Parece que el * Cosik * en su operación de servicio GetCosik() y que haya marcado como un contrato de datos no es el mismo * Cosik * como se define en el modelo de su entidad y por el cual su servicio intenta volver por algún motivo. –
Todavía obtiene el mismo error si deshabilita la carga diferida en su [ObjectContext] (http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.aspx) utilizando 'context. ContextOptions.LazyLoadingEnabled = false'? –
Puede agregar [KnownType (Cosik)] sobre su clase RecipeService. – Rajesh