如何向WCF数据服务添加简单计数

时间:2012-10-02 18:17:19

标签: linq rest wcf-data-services

我设置了一个简单的WCF数据服务。我选择了Linq-to-SQL解决方案。

public class MyDataService : DataService<SomeDataContext>
{
        public static void InitializeService(DataServiceConfiguration config)
        {
            config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
            config.SetEntitySetPageSize("*", 20);
            config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
        }

由于我使用Linq,我不得不为键添加部分类

[DataServiceKey("MessageId")]
public partial class Message
{
}

[DataServiceKey("UserId")]
public partial class User
{
}

...

所以我想添加一个原始方法来获取已发送消息的特殊用户。从Linq aggregate operators, such as count, are not supported开始,我认为一个不错的解决方法是为count创建一个只读资源端点。所以我添加了一个方法

   [WebGet]
    public int NumSpecialUsers()
    {
        var context = new SomeDataContext();
        int numUsers =
            context.Messages
            .Where(x => x.special == true && x.UserId != null)
            .Select(x => x.UserId)
            .Distinct()
            .Count();

        return numUsers;
    }

并将必要的配置添加到InitializeService()

    config.SetServiceOperationAccessRule("NumUsers", ServiceOperationRights.AllRead);

我可以通过localhost:1234 / MyDataService.svc / NumSpecialUsers成功调用该方法,但是localhost:1234 / MyDataService.svc中没有此方法的发现。 这似乎不对。通过不显示在localhost:1234 / MyDataService.svc中,这将违反REST,因为它意味着一个不可发现的端点。这也意味着当您使用Visual Studio创建OData Linq代理时,它也不会显示那里的方法。

我既不是REST | OData | WCF数据服务专家,所以如果有人对此有所了解,我很乐意听到他们。我刚开始冒险进入OData和WCF数据服务,我想采取一种很好的方法。非常感谢。

1 个答案:

答案 0 :(得分:0)

问题是,要在服务文档中显示服务操作,如果服务操作采用参数,那么网址会是什么样?

我们可以选择不显示任何服务操作或只显示不带参数的服务操作 - 我们在一致性方面犯了错误并做出了前一种选择。

如果你仍然认为只展示不带参数的服务操作会更好,那么我很乐意听到这个论点,如果我们得到很多关于这个功能的反馈,我甚至会做出改变。

由于 PRATIK