Почему моя служба WCF не использует мою модель сущности? - PullRequest
3 голосов
/ 23 августа 2011

У меня проблема с использованием службы WCF и Entity Model вместе.Я создал Entity Model из моей существующей базы данных.Это может быть показано ниже:

enter image description here

Нет проблем при использовании моих классов в любом консольном приложении из «Генератора объектного кода объекта».

Затем я создал службу WCF с интерфейсом ниже:

    [ServiceContract]
public interface IAuthorServices
{
    [OperationContract]
    [WebGet( UriTemplate="GetNews")]
    List<Newspaper> GetNews();

    [OperationContract]
    [WebGet(BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "GetAuthors")]
    List<Author> GetAuthors();

    [OperationContract]
    [WebGet(BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "GetAuthorTexts")]
    List<AuthorText> GetAuthorTexts();

    [OperationContract]
    [WebGet(BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "GetTodaysTexts")]
    List<AuthorText> GetTodaysTexts();

    [OperationContract]
    [WebGet(BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "GetExceptions")]
    List<KoseYazilari.Exception> GetExceptions();

}

Однако, когда я реализовал эти методы в классе службы и запустил свое клиентское приложение, я получил ошибку, такую ​​как

enter image description here

Как я могу избавиться от этой проблемы?

С уважением, KEMAL

1 Ответ

4 голосов
/ 23 августа 2011

Помечены ли ваши сущности атрибутом DataContract?Вы уверены, что они сериализуемы?

РЕДАКТИРОВАТЬ: Глядя на ваш код, кажется, что вы используете свои объекты напрямую.Это не очень хорошая практика, потому что (даже если ваш код работал), я не думаю, что вам нужны дополнительные свойства, подобные тем, которые автоматически генерирует Entity Framework.

В этом случае вам следует рассмотреть возможность использования DTO (Объекты передачи данных), это пример того, как класс Newspaper может быть:

[DataContract]
public class NewspaperDTO
{
    public NewspaperDTO(Newspaper newspaper)
    {
        this.Name = newspaper.Name;
        this.Image = newspaper.Image;
        this.Link = newspaper.Link;
        this.Encoding = newspaper.Encoding;
    }

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

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

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

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

А затем к вашим услугам:

public List<NewspaperDTO> GetNews()
{
    return entities.Newspapers.Select(a => new NewspaperDTO(a)).ToList();
}

PS Я заметил, что ваши сущностине утилизировать (я имею в виду внутри службы WCF).Вам следует рассмотреть возможность использования такого шаблона в каждом методе вашего обслуживания:

public List<NewspaperDTO> GetNews()
{
    using (var entities = new MyEntities())
    {
        return entities.Newspapers.Select(a => new NewspaperDTO(a)).ToList();
    }
}
...