2

我需要扩展我的 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);

任何帮助都非常感谢

4

2 回答 2

2

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

于 2010-08-11T17:47:03.500 回答
1

ServiceOperation 概念是一种附加功能,可在您想做一些事情而不是从表中读取数据时提供所需的转义。

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

您确实有两个选择,要么坚持使用基于 WS-*/SOAP 的 WCF 提供的分布式计算的 RPC 风格,要么花一些时间了解 REST 的真正含义。这里有一些链接可以帮助您入门。

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

于 2010-08-07T20:11:09.633 回答