ASP.NET 4 WCF RESTful服务

时间:2010-10-12 15:42:22

标签: wcf wcf-rest

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

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

  2. 如果没有必须安装WCF Rest Starter Kit或使用ASP.NET 4项目中的“in the box”库,如何创建WCF RESTful服务?我问,因为我们所做的所有工作都被推送到了一个生产服务器,在那里我们不会没有安装入门套件或其他软件而没有大的麻烦。

1 个答案:

答案 0 :(得分:2)

这两个问题的答案令人惊讶地简单。给定WCF数据服务,创建一个返回 IEnumerable< T> 的方法,并使用[WebGet]属性将其从服务中公开。

这是一步一步:

  1. 假设有一个实体数据模型或Linq To Sql模型公开一个名为MyDBDataContext的datacontext。

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

    公共类人员 {     public int PersonID {get;组; }     public string FirstName {get;组; }     public string LastName {get;组; } }

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

  5. 公共类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;
    }
    

    }