Когда я запускаю моей службы я получил исключение:Сериализация POCO прокси с WCF
Сервер обнаружил ошибку при обработке запроса. Сообщение об исключении: «Невозможно выполнить сериализацию параметра типа 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. Ниже код интерфейса:
[ServiceContract]
public interface ICosikService
{
[OperationContract]
[ApplyDataContractResolver]
[WebGet(UriTemplate = "/cosik")]
Cosik GetCosik();
}
и реализация этого контракта
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 и добавил [ApplyDataContractResolver] аннотацию к методу GetCosik. Однако это не помогло.
Любое предложение, что я пропустил?
Похоже * Cosik * в вашей работе службы GetCosik() и которые вы отметили поскольку контракт с данными не является тем же самым * Cosik *, как определено в вашей модели сущности и которую ваша служба почему-то пытается вернуть. –
Вы по-прежнему получаете ту же ошибку, если отключите ленивую загрузку в своем [ObjectContext] (http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.aspx) с помощью 'context. ContextOptions.LazyLoadingEnabled = false'? –
Можете ли вы добавить [KnownType (Cosik)] над классом RecipeService. – Rajesh