2010-08-07 5 views
2

Je dois étendre mon service de données WCF pour inclure des méthodes supplémentaires, pas seulement les tables de base de données.Ajout de méthodes REST aux services de données WCF?

Mais cela ne semble pas fonctionner correctement.

Tout d'abord je veux demander si c'est légal? ou mal vu?

La raison pour laquelle je dois le faire est que je dois ajouter des méthodes de repos supplémentaires qui feront appel aux services d'adhésion ASP.NET (les tables sont dans la db) pour valider un login-à-dire

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

ici est ce que j'ai (j'ai simplifié le IsValidLogin pour tester).

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

Maintenant, quand je vais à

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

Il semble fonctionner, je reçois un vrai retour sous la forme de XML. Mais j'ai mis un URI alors j'ai pensé que je pourrais le faire

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

Mais cela échoue? Je suis vraiment confus, des idées?

aussi pour que cela fonctionne, je besoin d'ajouter cette ligne, mais un peu, mais confus ici

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

Toute aide vraiment apprécié

+0

Quelle liaison avez-vous dans votre web.config? Afin de soutenir SOAP et REST dans WCF j'ai eu deux classes avec différentes liaisons. –

Répondre

1

La notion de ServiceOperation est une clouée sur la capacité de fournir exactement l'évasion vous en aviez besoin lorsque vous vouliez faire autre chose que lire des données à partir d'une table.

Malheureusement, le chemin par défaut dans WCF REST vous a conduit à mal comprendre comment les systèmes RESTful sont censés fonctionner. REST ne consiste pas seulement à exposer des données sur des URL. Vous avez vraiment deux choix, soit vous en tenir au style RPC de l'informatique distribuée que WSF */SOAP basé sur WCF ou passer du temps à apprendre ce que REST est vraiment. Il y a quelques liens here pour vous aider à démarrer.

Je ne peux pas vous dire quelle est la bonne approche pour votre scénario. Ce que je peux vous dire, c'est que vous n'allez pas apprendre à faire REST à partir de l'implémentation actuelle de WCF REST. Je ne dis pas que c'est impossible à faire, vous allez juste faire beaucoup de nage en amont.

+0

Darrel, je pense que j'ai déjà trié REST maintenant, j'ai un autre projet sur lequel je travaille et tout va bien ... Ma base de données est exposée via DataServices. J'ai également besoin de puiser dans l'adhésion ASP.NET qui sont des tables (dans mon cas) dans la base de données ... alors j'ai pensé étendre (ajouter) mon projet de service de données pour inclure quelques méthodes de repos .... –

+0

Si vous avez d'autres commentaires que j'écoute mais je ne vois vraiment pas comment j'ai raté le point? peux-tu élaborer? WCF Rest fonctionne avec des méthodes http comme GET, PUT etc .. J'ai placé un GET comme une méthode et retourne des données .... –

+0

@mark Si vous essayez de faire une connexion, vous ne faites pas de demandes sans état. C'est une contrainte REST.Si vous désérialisez des objets sur le client et envoyez l'application/xml en tant que type de média (quel WCF), alors vos requêtes ne sont pas auto-descriptives. C'est une autre contrainte REST. IsValidLogin viole la contrainte d'identification de ressource. Je suis sûr que vous ne retournez pas d'hypermédia ou que vous utilisez un client hypermédia, HATEOAS n'est probablement pas en tête de votre liste d'objectifs de conception. Honnêtement, je ne dis pas que ce que vous faites est faux, mais je ne pense pas que ce soit REST. –

Questions connexes