2012-03-28 77 views
2

我正在嘗試構建一個Restful WCF服務。在我的WCF服務中,我引用了包含數據訪問層的1個DLL。WCF REST服務與通用集合

我有以下的方法在我的WCF類

public class Search : ISearch 
{ 

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

} 

我的界面保持OperationContract的如下:

[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服務? – 2012-03-28 19:37:25

+0

您需要了解有關該錯誤的更多詳細信息,請嘗試附加調試程序併發布異常詳細信息。我的繼承人如何設置/配置WCF用得這可能會給你一些指點http://blog.staticvoid.co.nz/2012/02/using-rest-wcf-service.html – 2012-03-28 19:40:00

回答

0

我們往往不得不返回一個泛型列表作爲響應WCF服務的問題。

最簡單的方法解決它是創建具有一個屬性是通用列表中的類,然後返回這個類。

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

或者只是簡單的例子你的自定義類繼承自'List '。這將使它不會產生更多級別的XML。 – 2012-03-28 19:41:49

+0

@Shiraz我認爲你走在正確的軌道上。你可以發佈一個代碼片段來創建具有單個屬性的類,它是通用列表,然後返回這個類?謝謝你... – midnightCoder 2012-03-28 19:47:03

+0

@M。 Babcock你也是我thnik正從我以前研究的方向朝着正確的方向前進。你可以發佈代碼在哪裏繼承?我的意思是它不會是公共課搜索:ISearch:列表對不對? – midnightCoder 2012-03-28 19:50:34

3

看看我的RESTful web服務做這樣的事情,我通常做一些更接近:

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

那麼你的界面會是這樣:

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

然後你服務合同會是什麼樣子:

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

我只是在這裏的困惑是第一部分[CollectionDataContract] 公共類產品:列表 { 公共產品(IEnumerable的產品):基地(產品){}} 我 WCF服務的referncing一個dll包含產品數據對象和DAL。那是上面代碼的地方嗎? – midnightCoder 2012-03-28 20:20:40

+0

這就是我把它放在我的項目中的地方,但是如果你喜歡把它放在你的BLL中,那麼它也可能在那裏工作。 – 2012-03-28 20:22:16

+0

我更願意單獨使用數據對象和DAL來保存DLL。仍然困惑在這部分,但我會在今晚晚些時候看看,看看我能否得到它的工作..謝謝.. – midnightCoder 2012-03-28 20:32:53