2012-03-28 76 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