2009-02-10 10 views
1

Je viens de commencer à bricoler avec le kit de démarrage WCF REST, j'ai regardé les screencasts et ... Je pense que je suis juste stupide. :) Hors de la boîte (avec les modèles fournis), je peux créer des services REST pour une ressource singleton ou une collection d'une ressource. Mais qu'en est-il du soutien pour différents types de ressources dans le même projet? Par exemple, si j'ai des livres, je veux aussi avoir des auteurs et des éditeurs. Avec les modèles fournis, je ne vois pas un moyen facile d'y parvenir. Créer un service (et donc un projet VS) pour chaque ressource me semble ridicule. J'ai besoin de prendre en charge plusieurs types de ressources dans un seul service afin qu'ils puissent être accédés sous une URL similaire, de sorte que l'utilisateur n'a qu'à remplacer la dernière partie, comme http://service/books pour obtenir tous les livres et http://service/authors/32 pour obtenir un particulier auteur.WCF REST Starter Kit - support pour plusieurs ressources?

Quelqu'un peut-il nous éclairer à ce sujet? Je sais que cela peut être créé avec un simple service WCF, mais le kit de démarrage a déjà tous les éléments en place, alors pourquoi ne pas l'utiliser? Comment aborder un projet généré par un modèle pour ajouter un support pour différents types de ressources?

Merci.

Répondre

2

Je pense que vous pensez au kit de démarrage WCF REST. Essayez de considérer le kit de démarrage WCF REST comme un simple service WCF configuré pour une configuration facile dans l'environnement http. Les modèles par défaut configurés pour le kit de démarrage WCF REST sont destinés à être utilisés en tant qu'échantillon. Vous devrez simplement créer votre propre signature ou adapter la leur pour répondre à vos besoins. Les éléments clés sur lesquels vous devez vous concentrer sont le code dans le fichier .svc (vous ne pouvez pas y accéder en double-cliquant, vous devrez choisir open with) et les interfaces [ServiceContract].

Modifiez l'interface [ServiceContract] dans le code fourni pour qu'elle ressemble à un service WCF standard.

Voici un exemple d'un flux ATOM Pub modifié pour vos besoins

[ServiceBehavior(IncludeExceptionDetailInFaults = true, InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single)] 
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
[ServiceContract] 
public partial class LibraryFeed 
{ 
    public LibraryFeed() 
    { 
    } 

    /// <summary> 
    /// Returns an Atom feed. 
    /// </summary> 
    /// <returns>Atom feed in response to a HTTP GET request at URLs conforming to the URI template of the WebGetAttribute.</returns> 
    [WebHelp(Comment = "Gets a list of Books.")] 
    [WebGet(UriTemplate = "/books/?numItems={numItems}")] 
    [OperationContract] 
    public Atom10FeedFormatter GetBooks(int numItems) 
    { 
     var books = GetBooks(); 
     List<SyndicationItem> items = GetItems(books, numItems); 

     SyndicationFeed feed = CreateFeed(items); 

     WebOperationContext.Current.OutgoingResponse.ContentType = ContentTypes.Atom; 
     return feed.GetAtom10Formatter(); 
    } 

    /// <summary> 
    /// Returns an Atom feed. 
    /// </summary> 
    /// <returns>Atom feed in response to a HTTP GET request at URLs conforming to the URI template of the WebGetAttribute.</returns> 
    [WebHelp(Comment = "Gets a single author.")] 
    [WebGet(UriTemplate = "/authors/?numItems={numItems}")] 
    [OperationContract] 
    public Atom10FeedFormatter GetAuthors(int numItems) 
    { 
     var authors = GetAuthors(); 
     List<SyndicationItem> items = GetItems(authors, numItems); 

     SyndicationFeed feed = CreateFeed(items); 

     WebOperationContext.Current.OutgoingResponse.ContentType = ContentTypes.Atom; 
     return feed.GetAtom10Formatter(); 
    } 

    /// <summary> 
    /// Returns an Atom feed. 
    /// </summary> 
    /// <returns>Atom feed in response to a HTTP GET request at URLs conforming to the URI template of the WebGetAttribute.</returns> 
    [WebHelp(Comment = "Gets a list of Authors.")] 
    [WebGet(UriTemplate = "/authors/{id}")] 
    [OperationContract] 
    public Atom10FeedFormatter GetAuthor(string id) 
    { 
     var author = GetSingleAuthor(id); 
     WebOperationContext.Current.OutgoingResponse.ContentType = ContentTypes.Atom; 
     return GetItem(author.GetAtom10Formatter()); 
    } 
} 
+0

je me suis dit que éventuellement. J'essayais d'utiliser les projets modèles comme base de mon développement, pas seulement des échantillons, ce qu'ils sont. Je viens de créer mon propre service WCF et je réutilise la bibliothèque d'extensions du kit de démarrage. –

Questions connexes