具有通用集合的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]的正确代码吗?
提前谢谢。有一段时间我一直在这个问题上拔头发。。
看着我的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; }
}