2009-08-06 10 views
3

Je suis nouveau à WCF (et plutôt rouillé avec .NET en général) donc il y a de fortes chances pour que ce soit une question à laquelle j'ai répondu et je l'ai manqué.Consommer une API JSON RESTful en utilisant WCF

Je crée une application ASP.NET MVC qui utilisera une API RESTful JSON pour son backend. J'ai examiné les différentes options pour savoir comment parler à une telle API dans. NET et il semble que WCF est le choix le plus populaire de loin. En lisant encore plus dans WCF, j'ai maintenant une classe de base qui fait une demande, ce qui est un début.

Mais maintenant je dois en faire plus avec ça, et je ne fais pas beaucoup de progrès. J'ai besoin d'envoyer un POST à ​​l'API avec un corps JSON. Voici ce que j'ai jusqu'à présent:

using System.ServiceModel; 
using System.ServiceModel.Web; 
using System.Runtime.Serialization; 

namespace APIConsumer { 
    [ServiceContract] 
    public interface IAPIClient { 
     [OperationContract] 
     [WebInvoke(
      Method = "POST", 
      BodyStyle = WebMessageBodyStyle.Bare, 
      RequestFormat = WebMessageFormat.Json, 
      ResponseFormat = WebMessageFormat.Json, 
      UriTemplate = "/session/login.json" 
      )] 
     string SessionLogin(string login_name); 
    } 

    public class APIClient : ClientBase<IAPIClient>, IAPIClient { 
     public string SessionLogin(string login_name) { 
      return this.Channel.SessionLogin(login_name); 
     } 
    } 
} 

Ce que je ne peux pas comprendre est la bonne façon de passer a) les données dans le corps POST & b) un objet .NET sérialisés approprié comme JSON dans le corps POST . Y a-t-il un bon exemple de la façon de travailler là-bas quelque part?

+0

Je pense que vous avez besoin de s/WFC/WCF/g, y compris tag – jcopenha

Répondre

2

Si vous vous demandez comment formater le corps JSON de votre POST à ​​l'opération SessionLogin, dans votre cas, ce serait très simple. Les données JSON serait juste:

{"login_name": "someuser"} 

Le cadre WCF traitera la cartographie que les données à votre opération, et passera la valeur « someuser » au paramètre nom_login pour vous. Est-ce ce dont vous aviez besoin, ou y avait-il un scénario plus complexe pour lequel vous aviez besoin d'aide?

+0

Le format du JSON n'est pas le problème, mais comment puis-je m'assurer que le JSON est effectivement envoyé avec la requête dans le corps? – Tivac

+1

Cela dépend de la façon dont vous appelez le service. Est-ce via javascript, jquery, mootools? Ou est-ce à partir d'un client .NET? Si c'est de jquery, c'est assez facile, comme jquery fournit un appelant ajax pratique qui a un paramètre de données (va dans le corps). Si c'est un autre client .NET, vous n'avez même pas besoin de vous soucier de la notation json. Vous travaillez directement avec des objets natifs et WCF transfère toute la sérialisation et la traduction pour vous. – jrista

0

Je rencontrais le même problème. Parfois, POST -ING JSON fonctionne, mais pas toujours. Ce n'est pas fiable et les raisons de l'échec peuvent être mystérieuses. J'ai fini par trouver que POST était plus de travail que cela en valait la peine, et que vous pourriez accomplir la même chose avec GET. Si vous n'êtes pas absolument ont pour concevoir votre service avec POST, j'ai un exemple concret de la façon d'accomplir ce que vous essayez de faire avec POST avec GET ici:

http://winsockwebsocket.codeplex.com/

(Cela fait partie d'un projet apparemment sans rapport, mais allez simplement dans le dossier Northwind.Web pour voir un exemple de travail complet d'envoi/réception JSON de jQuery à WCF.)

Questions connexes