2009-07-24 19 views
1

の両方を認識しません。WCFサービスは、私は、次のWebサービスを持っているカスタムクラスとメソッド

[ServiceContract(Namespace = "")] 
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
    public class MyTestClass 
    { 
     [OperationContract] 
     public List<TrackInfo> GetAll(string songName) 
     { 
      return new List<tracksInfo>; 
     } 
} 

私が目的でシンプルにしました。いずれの場合でも、サービス参照外のクラスでTrackInfoが宣言されている場合、Silverlight領域を意味するもう一方のサービスは、TrackInfoクラスのみを認識しますが、GetAllメソッドは見つかりません。私は、基準内trackinfoクラスを置くことが、MyTestClassの外で同じ問題が

を発生しようとすると、私はのDataContractとしてserivce内trackinfoクラスを入れてみました:

[DataContract] 
    public class TrackInfo 
    { 
     public int ID { get; set; } 
     //Should consider using a stream instead 
     public List<Image> FullSizeNotes { get; set; } 
     public Image TrackNotes { get; set; } 
     public Stream MidiFile { get; set; } 
    } 

今、サービスがGETALL機能を認識し、 trackinfoのプロパティは認識されません。

答えて

1

データ契約は、ASMXサービスのXMLシリアライザとは異なり、「オプトイン」手法です。あなたがそれ以外のことを言わない限り、それはすべてのパブリックフィールドとpublic read/writeプロパティをシリアライズしました。

データコントラクトでは、[DataMember]属性でシリアル化するプロパティを装飾する必要があります。

[DataContract] 
public class TrackInfo 
{ 
     [DataMember] 
     public int ID { get; set; } 
     //Should consider using a stream instead 
     [DataMember] 
     public List<Image> FullSizeNotes { get; set; } 
     [DataMember] 
     public Image TrackNotes { get; set; } 
     [DataMember] 
     public Stream MidiFile { get; set; } 
} 
0

.NET 3.5 SP1で動作するもう1つのアプローチは、エンティティを外部化してエンティティを作成する必要がないようにすることです。全体像のコメントを必ずお読みください:

http://community.irritatedvowel.com/blogs/pete_browns_blog/archive/2009/07/13/Sharing-Entities-between-WCF-and-Silverlight.aspx

基本的には、クライアントとサーバ間のクラスファイルのコードを共有し、サービス参照を設定する際に、すでに上に存在するタイプを再利用するためにVSを伝えますクライアント。

ピート

関連する問題