2010-08-07 75 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