2012-03-28 11 views
2

Restful WCFサービスを構築しようとしています。私のWCFサービスでは、データアクセスレイヤーを含む1つのDLLを参照しています。WCF RESTサービス(汎用コレクションあり)

私は次のように

public class Search : ISearch 
{ 

    public List<Product> GetProductList() 
    { 
     ProductDA dataAccess = new ProductDA(); 
     List<Product> obj = new List<Product>(); 
     obj = dataAccess.GetProducts(); 
     return obj; 
    } 

} 

マイインタフェースはOPerationContractを保持している私のWCFクラスで、次の方法があります。

[ServiceContract] 
public interface ISearch 
{ 
    [OperationContract] 
    [WebGet(UriTemplate = "getProductList", RequestFormat = WebMessageFormat.Xml, ResponseFormat WebMessageFormat.Xml)] 
    List<Product> GetProductList(); 
} 

私は、私は次のエラーが表示され、ブラウザでURL http://localhost:36741/RestService/Search.svc/getFoodTruckNameListを実行すると: サーバーで要求の処理中にエラーが発生しました

[Operat ionContract]の場合List<Product> GetProductList();

ありがとうございます。

+0

このエラーは、通常、コードが例外をスローしたことを意味します。あなたのWebサービスをデバッグしようとしましたか? –

+0

エラーの詳細を確認し、デバッガを接続して例外の詳細を投稿する必要があります。あなたにいくつかのポインタを与えるかもしれない残りを使用するためにWCFを設定/設定する方法に関する私の簡単な例をHeres http://blog.staticvoid.co.nz/2012/02/using-rest-wcf-service.html –

答えて

0

WCFサービスへの応答としてGenericリストを返す際に問題が発生することがよくありました。

単純な解決方法は、Genericリストである単一のプロパティを持つクラスを作成し、このクラスを返すことです。

[DataContract] 
public class Class1 
{ 
    [DataMember] 
    public List<Foo> Foos { get; set; } 
} 
+1

またはカスタムクラスは 'List 'から継承します。これにより、必要以上に多くのXMLレベルが生成されなくなります。 –

+0

@Shirazあなたは正しい道にいると思います。 Genericリストである単一のプロパティを持つクラスを作成するコードスニペットを投稿してから、このクラスを返すことができますか?おかげで... – midnightCoder

+0

@M。 Babcockあなたはまた、私が以前に研究したことから正しい方向に向かっています。あなたは継承するコードを投稿できますか?私はそれがpublicクラスではないことを意味します検索:ISearch:リストは正しいですか? – midnightCoder

3

このような何かを私のRESTful Webサービスを見て、私は通常に近い何かの操作を行います。

[ServiceContract] 
public interface ISearch 
{ 
    [OperationContract] 
    [WebGet(UriTemplate = "getProductList", RequestFormat = WebMessageFormat.Xml, ResponseFormat WebMessageFormat.Xml)] 
    Products GetProductList(); 
} 

そしてあなた:

[CollectionDataContract] 
public class Products : List<Product> 
{ 
    public Products(IEnumerable<Product> products) : base(products) { } 
} 

を次に、あなたのインターフェイスは次のようになりますサービス契約は次のようになります。

public class Search : ISearch 
{ 
    public Products GetProductList() 
    { 
     return new Products(new ProductDA().GetProducts()); 
    } 
} 
+0

私の唯一の混乱は、ここで[CollectionDataContract] パブリッククラスの製品最初のセクションであります製品データオブジェクトとDALを保持する。上記のコードはどこにありますか? – midnightCoder

+0

これは私のプロジェクトに書いたところですが、あなたのBLLに入れたいのであれば、おそらくそこでもうまくいくでしょう。 –

+0

私はデータオブジェクトとDALだけでDLLを保つことを好みます。まだこの部分で混乱していますが、私は今晩後で見て、私がそれを働かせることができるかどうか見てみましょう。 – midnightCoder

関連する問題