2011-08-23 11 views
3

WCFサービスとエンティティモデルを一緒に使用する際に問題が発生しました。私は既存のデータベースからエンティティモデルを作成しました。これは以下に示すことができます。WCFサービスでエンティティモデルが使用されないのはなぜですか?

enter image description here

「エンティティ・オブジェクトコードジェネレータ」から任意のコンソールapplicatonで私のクラスを使用している間に問題はありません。私は、サービスクラスでこれらのメソッドを実装し、私のクライアントアプリケーションを実行する場合しかし、私は

enter image description here

のようなエラーが発生しました

[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(); 

} 

その後、私は以下のインターフェイスでWCFサービスを作成しました

この問題を解決するにはどうすればよいですか?

よろしく、 KEMALは

答えて

4

はあなたのエンティティはDataContract属性でマークされていますか?それらがシリアライズ可能であることを確認していますか?

EDIT:あなたのコードを見ると、エンティティを直接使用しているようです。これは良い方法ではありません。なぜなら(たとえあなたのコードが機能していたとしても)私は、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(); 
    } 
} 
+0

あなたは私の第二のスクリーンショット、GetNewspapersメソッドが動作していないのに対し、正常に動作している作家を返すGetAuthorsメソッドから見ることができるように。私が見たことは、「Entity Model Self-Tracking Object Generator」からエンティティオブジェクトを作成すると、すべて正常に動作することです。しかし、今回は、WebHttpBindingを介してRESTサービスでサービスを公開しようとすると、ResponseFormatを埋めてもjsonオブジェクトとして自分のオブジェクトを直列化/逆シリアル化しません。 Btw、XMLとしてシリアライズ/デシリアライズしたいが、エンティティオブジェクトを "Self-Tracking Object Gen"で生成する必要がある場合は正常に動作する – kkocabiyik

+0

あなたの両方の質問に、私の答えは、はい、はいです。 – kkocabiyik

+0

何が起こっているのかを理解するのは少し難しいです。クラス図を投稿しても、私はバックグラウンドで何が起こっているのか分かりません。あなたの問題の解凍された解を私にリンクさせてみてください。) –

関連する問題