2

我想知道两件事的可能性:

  1. 是否可以使用 WCF 数据服务来公开它所映射到的实体模型 (EDMX) 中不存在的“集合”?这会是拦截器有意义的情况吗?

  2. 如何在无需安装 WCF Rest Starter Kit 或在 ASP.NET 4 项目上使用“内置”库的情况下创建 WCF RESTful 服务?我之所以这么问,是因为我们所做的所有工作都被推送到生产服务器上,在那里我们无法轻松安装入门工具包或其他软件

4

1 回答 1

2

这两个问题的答案都非常简单。给定 WCF 数据服务,创建一个返回IEnumerable<T>的方法,并使用 [WebGet] 属性从服务中公开它。

这是一步一步的:

  1. 假设一个实体数据模型或 Linq To Sql 模型公开了一个名为 MyDBDataContext 的数据上下文。

  2. 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;
    }
    
    }
  3. 假设您有一些不在模型中的实体。在这种情况下,我将使用“Person”作为示例:

    公共类人 { 公共 int PersonID { 获取;放; } 公共字符串名字 { 获取;放; } 公共字符串姓氏 { 获取;放; } }

  4. 只需向您的 WCF 数据服务类添加一个方法,该方法返回您的类型并使用 [WebGet] 进行装饰:

公共类 CustomerDataServ : DataService< Data.CustDataClassesDataContext > {

[WebGet]
public IEnumerable<Person> GetEntries() {
    List<Person> entries = new List<Person>();
    for (int i = 0; i < 30; i++) {
        entries.Add(
            new Person() { PersonID = i, FirstName = "First " + i, LastName = "Last " + i }
        );
    }   
    return entries.ToArray();   
}

// 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;
}

}

于 2010-10-22T15:14:12.500 回答