我想知道两件事的可能性:
是否可以使用WCF数据服务来公开它映射到的实体模型(EDMX)中不存在的“集合”?这会是拦截器有意义的情况吗?
如果没有必须安装WCF Rest Starter Kit或使用ASP.NET 4项目中的“in the box”库,如何创建WCF RESTful服务?我问,因为我们所做的所有工作都被推送到了一个生产服务器,在那里我们不会没有安装入门套件或其他软件而没有大的麻烦。
答案 0 :(得分:2)
这两个问题的答案令人惊讶地简单。给定WCF数据服务,创建一个返回 IEnumerable< T> 的方法,并使用[WebGet]属性将其从服务中公开。
这是一步一步:
假设有一个实体数据模型或Linq To Sql模型公开一个名为MyDBDataContext的datacontext。
您的WCF数据服务的代码如下所示:
public class MyWCFDataService : DataService< MyDBDataContext >
{
// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
{
// TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.
// Examples:
config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
}
}
假设您有一些不在模型中的实体。在这种情况下,我将使用“人物”作为例子:
公共类人员 { public int PersonID {get;组; } public string FirstName {get;组; } public string LastName {get;组; } }
只需向WCF数据服务类添加一个方法,该类返回您的类型并使用[WebGet]进行装饰:
公共类CustomerDataServ:DataService&lt; Data.CustDataClassesDataContext&gt; {
// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
{
// TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.
// Examples:
config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
}
}