将REST方法添加到WCF数据服务?

时间:2010-08-07 19:49:24

标签: wcf rest wcf-data-services wcf-rest

我需要扩展我的WCF数据服务以包含其他方法,而不仅仅是数据库表..

但它似乎没有正常工作。

首先,我想问一下这是否合法?还是皱起眉头?

我需要这样做的原因是我需要添加额外的REST方法来调用ASP.NET成员资格服务(表格在数据库中)以验证登录,即

    public bool IsValidLogin(string username, string password)
    {
        return System.Web.Security.Membership.ValidateUser(username, password);
    }

这是我所拥有的(我已经简化了IsValidLogin进行测试)。

    [WebGet(UriTemplate = "TestMe")]
    public bool IsValidLogin()
    {
        return true;
    }

    // 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("IsValidLogin", ServiceOperationRights.All);

现在我去

  http://localhost/MyDataAccess/MyService.svc/IsValidLogin

似乎工作我得到了一个真正的XML形式。但我设置了一个URI,所以我认为我可以做到这一点

  http://localhost/MyDataAccess/MyService.svc/TestMe

但它失败了吗?我真的很困惑,有什么想法吗?

同样为了它的工作,我需要添加这一行,但有点困惑,但

    config.SetServiceOperationAccessRule("IsValidLogin", ServiceOperationRights.All);

任何帮助真的很感激

2 个答案:

答案 0 :(得分:2)

不评论上面的REST dicsussion,只是在文档上发布了关于如何执行此操作的链接,称为“服务操作”:http://msdn.microsoft.com/en-us/library/cc668788.aspx

答案 1 :(得分:1)

ServiceOperation概念强调了当您想要执行除了从表中读取数据之外的其他操作时提供所需的转义。

不幸的是,WCF REST中的默认路径会让您误解RESTful系统应该如何工作。 REST不只是在URL上公开一些数据。

你真的有两个选择,要么坚持使用基于WS-* / SOAP的WCF提供的RPC风格的分布式计算,要么花一些时间来学习REST真正的全部内容。有一些链接here可以帮助您入门。

我不能告诉你什么是你的场景的正确方法。我可以告诉你的是,你不会学习如何使用当前的WCF REST实现做REST。我不是说这是不可能做到的,你只会在上游游泳。