具有通用集合的WCF REST服务

本文关键字:WCF REST 服务 集合 | 更新日期: 2023-09-27 18:29:23

我正在尝试构建一个Restful WCF服务。在我的WCF服务中,我引用了1个包含数据访问层的dll。

我在WCF类中有以下方法

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

我的界面保存的操作合同如下:

[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在浏览器中,我收到以下错误:服务器在处理请求时遇到错误

有人知道调用List<Product> GetProductList();的[OperationContract]的正确代码吗?

提前谢谢。有一段时间我一直在这个问题上拔头发。。

具有通用集合的WCF REST服务

看着我的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());
    }
}

我们经常在返回泛型列表作为对WCF服务的响应时遇到问题。

解决这个问题的简单方法是创建一个具有单个属性的类,即Generic列表,然后返回这个类。

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