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

Linq 如何向WCF数据服务添加简单计数,linq,rest,wcf-data-services,Linq,Rest,Wcf Data Services,我有一个简单的WCF数据服务设置。我使用了Linq到SQL的解决方案 public class MyDataService : DataService<SomeDataContext> { public static void InitializeService(DataServiceConfiguration config) { config.SetEntitySetAccessRule("*", EntitySetRight

我有一个简单的WCF数据服务设置。我使用了Linq到SQL的解决方案

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

所以我想添加一个基本方法来获取发送消息的特殊用户。因为,我认为一个不错的解决方法是为计数创建一个只读资源端点

   [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()

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


我既不是REST | OData | WCF数据服务专家,所以如果有人对此有想法,我很乐意听取他们的意见。我刚刚开始我对OData和WCF数据服务的探索,我想用一种很好的方法来处理这些事情。非常感谢。

问题在于,对于要在服务文档中显示的服务操作,如果服务操作采用参数,url会是什么样子

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

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

谢谢 普拉蒂克

   [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;
    }
    config.SetServiceOperationAccessRule("NumUsers", ServiceOperationRights.AllRead);