我正在使用开放数据协议(OData)制作一些POC。我的目标是将一些自定义方法作为服务操作与实体一起公开,但它们在可访问时不会显示。
namespace WebApplication1
{
public class WcfDataService2 : DataService<MyDataSourceProvider>
{
public static void InitializeService(DataServiceConfiguration config)
{
config.SetEntitySetAccessRule("MyProducts", EntitySetRights.AllRead);
config.SetEntitySetAccessRule("MySuppliers", EntitySetRights.AllRead);
config.SetEntitySetAccessRule("MyLondonSuppliers", EntitySetRights.AllRead);
config.SetServiceOperationAccessRule("GetSuppliersByCity", ServiceOperationRights.AllRead);
config.SetServiceOperationAccessRule("LondonSuppliers", ServiceOperationRights.AllRead);
config.SetServiceOperationAccessRule("UpdateProductName", ServiceOperationRights.All);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
}
[WebGet]
public IQueryable<Supplier> GetSuppliersByCity(string city)
{
return DataRepository.Suppliers.Where(s => s.Town.ToLower().Contains(city.ToLower())).AsQueryable();
}
[WebGet]
public IQueryable<Supplier> LondonSuppliers()
{
return DataRepository.Suppliers.Where(s => s.County == "London").AsQueryable();
}
[WebGet]
public string UpdateProductName(int ID, string Name)
{
DataRepository.Products.First(p => p.ProductID == ID).Name = Name;
return "ok";
}
}
}
当我在http://localhost:51696/WcfDataService2.svc/
查询服务时,我看到的只是实体:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<service xml:base="http://localhost:51696/WcfDataService2.svc/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app" xmlns="http://www.w3.org/2007/app">
<workspace>
<atom:title>Default</atom:title>
<collection href="MyProducts">
<atom:title>MyProducts</atom:title>
</collection>
<collection href="MySuppliers">
<atom:title>MySuppliers</atom:title>
</collection>
<collection href="MyLondonSuppliers">
<atom:title>MyLondonSuppliers</atom:title>
</collection>
</workspace>
</service>
没有方法的痕迹:
我错过了什么吗?
顺便说一下,我正在使用Visual Studio 2010和.NET 4.0。
答案 0 :(得分:0)
尝试将MaxProtocolVersion设置为V3
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
答案 1 :(得分:0)
对我来说不幸的是,OData V2似乎有一些限制,包括公开服务操作的能力:
服务操作(调用WebGet方法)不会在服务文档中公开(即对服务器根目录的请求的响应)。只有实体集在那里暴露。
我在某些Microsoft Forum thread找到了这个答案。