2010-08-07 76 views
2

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

任何帮助非常感激

+0

你在你的web.config有什么约束?为了支持WCF中的SOAP和REST,我有两个具有不同绑定的类。 – 2010-08-07 19:59:12

回答

1

的ServiceOperation概念是一个上涨的能力,以提供准确的逃生你需要当你想从表中读取数据以外的其他东西。

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

你真的有两种选择,要么坚持采用基于WS - */SOAP的WCF提供的RPC分布式计算方式,要么花一些时间学习REST的真正意义。有一些链接here让你开始。

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

+0

Darrel,我认为我已经有了REST现在排序,我有另一个项目,我正在工作,一切都很好......我的数据库通过DataServices公开。我还需要使用ASP.NET Membership(在我的情况下)在db ...所以我想扩展(添加到)我的数据服务项目,包括一些休息方法...... – 2010-08-07 20:28:14

+0

如果你有我正在听的进一步评论,但我真的不明白我是如何错过了这一点?你能详细说明吗? WCF Rest可以与GET,PUT等http方法一起工作。我已经将GET作为方法并返回一些数据...... – 2010-08-07 20:32:08

+0

@mark如果您尝试执行登录,那么您不会执行无状态请求。这是一个REST约束。如果您正在反序列化客户端上的对象并将application/xml作为媒体类型(WCF)执行的操作,那么您的请求不是自描述。这是另一个REST约束。 IsValidLogin违反了资源标识约束。我很确定你没有返回超媒体,也没有使用超媒体驱动的客户端,所以HATEOAS在你的设计目标列表中可能不高。老实说,我不是说你在做什么是错的,只是不认为它是REST。 – 2010-08-07 20:43:18