2011-07-13 5 views
16

J'ai une solution MVC qui héberge quelques routes pour les services d'API Web. Dans certaines situations, je vais les appeler à partir de JavaScript avec un simple get HTTP. Dans d'autres, je veux les appeler à partir d'un code .NET, peut-être une autre application MVC.Ajout d'une référence de service au service API Web ASP.NET

Existe-t-il un moyen d'ajouter une référence de service à ces points de terminaison d'API Web et l'outil crée les types de client proxy et CLR comme il le ferait avec un service WCF typique? Je sais qu'il n'y a pas de SOAP impliqué ici mais j'ai lu que c'est possible, mais pas comment.

Répondre

15

Non c'est un service REST. Le service REST n'expose pas les métadonnées pour créer un proxy par référence de service (à l'exception des services de données WCF qui ont une forme particulière de métadonnées). Utilisez la classe HttpClient de l'API Web pour appeler le service.

+0

Merci pour la réponse. Donc, il n'y a pas un schéma de métadonnées exposé en tant que tel, mais pensez-vous que l'on pourrait dériver de la réponse un peu comme xsd pour XML. Ajouter une référence de service aurait besoin de dériver une sorte de schéma, construire une classe clr basée sur ceci et le client déserialiserait essentiellement à une collection de ceci. Est-ce quelque chose que l'outillage pourrait pratiquement supporter pour donner la flexibilité d'utiliser ce type de service au moment du design –

+0

C'est une excuse plutôt boiteuse. Le scénario (typique) ici est que vous appelez votre propre service - et vous avez toujours les métadonnées pour votre propre service. C'est simplement un problème d'outillage inférieur. Les choses empirent si vous voulez OData: Ensuite, vous devrez écrire votre propre fournisseur linq pour obtenir l'expressivité que vous avez eu avec les bons vieux services WCF. De meilleurs outils pourraient changer cela. – John

+0

@John: Il existe de nombreux sites UserVoice gérés par MS. Essayez d'augmenter la demande (si elle n'existe pas déjà) pour ajouter la prise en charge de la description WADL ou WSDL2 pour les services REST. Une fois la description disponible, vous pouvez également avoir une génération pour le client. –

1

Non directement, mais à partir des quelques exemples que j'ai vus, l'utilisation de Web Api implique la configuration d'un contrat de service. Il semble que si vous ajoutez une deuxième interface de contrat de service avec les attributs DataContract habituels d'OperationContract &, vous pouvez créer un point de terminaison avec une liaison WCF standard de votre choix et son point de terminaison MEX correspondant. Le service implémenterait les deux interfaces de sorte que l'ajout de référence de service puisse obtenir un document WSDL à partir du point de terminaison WCF standard.

+0

Il y a quelques détails à considérer, tels que la sérialisation (qui devrait être la même dans les deux cas pour éviter l'impédance), les attributs de méthodes en double (incompatibles entre les frameworks), l'authentification et l'autorisation. Je suppose que ce n'est pas un problème qui ne vaut pas les avantages, mais c'est néanmoins une idée intéressante. – John

8

Nous n'avons aucun mécanisme standard pour cela. REST consiste à construire des systèmes qui permettent aux clients d'évoluer indépendamment du serveur. HTTP définit une interface uniforme de GET, PUT, POST, DELETE, etc. Il n'y a donc pas besoin d'une description de méthode. Pour les deux raisons, il n'y a pas d'équivalent REST WSDL, ou je devrais dire aucun équivalent qui a vraiment pris de l'ampleur dans la communauté REST (c'est-à-dire qu'il y a WADL).

Le point de couplage dans les services REST concerne vraiment le type de support/format de corps. Pour cela, nous soutenons un mécanisme fortement typé. Dans Web API, nous envoyons un HttpClient (HttpClient on Nuget) qui vous permet de prendre un type CLR et de le transformer en une représentation. En dehors de la boîte, il prend en charge XML et JSON.

Ainsi, vous pouvez créer un type CLR et le partager avec des clients, puis utiliser HttpClient sur le client.

Pour créer le type lui-même, il existe également plusieurs options.

  1. Créer la main
  2. Utilisez le « Coller comme Xml » outil et l'utilisation web fonctionnalité de page d'aide automatique de api pour copier/coller.