Vous pouvez exposer le service dans deux points de terminaison différents. le SOAP peut utiliser la liaison qui prend en charge SOAP, par exemple basicHttpBinding, le RESTful peut utiliser le webHttpBinding. Je suppose que votre service REST sera en JSON, dans ce cas, vous devez configurer les deux points de terminaison avec la configuration de comportement suivante
Une autre façon de le faire est d'exposer deux contrats de service différents et chacun avec une configuration spécifique. Cela peut générer des doublons au niveau du code, mais à la fin de la journée, vous souhaitez le faire fonctionner.
À quoi cela ressemble-t-il lorsque j'ai .svc hébergé dans IIS dans un répertoire virtuel comme someserver / myvirtualdir / service.svc ? Comment dois-je y accéder?
Cela signifie que mon contrat IEvents n'est pas valide lorsque j'essaie de référencer mon interface de service: <service name = "Events"> <endpoint address = "json" binding = "webHttpBinding" behaviorConfiguration = "jsonBehavior" contract = "IEvents" />. Mon IEvents a un attribut [ServiceContract] sur l'interface, donc je ne sais pas pourquoi. </service>
PositiveGuy
Je peux faire fonctionner localhost: 44652 / MyResource / json mais je ne peux pas obtenir un identifiant pour travailler localhost: 44652 / MyResource / 98 / json . J'ai essayé d'ajouter un UriTemplate de "/ {id}", j'ai également essayé "events / {id} mais il ne le trouve pas quand j'essaye de toucher le service. Seul le premier fonctionne, je ne sais pas comment obtenir le dernier au travail.
PositiveGuy
2
Comment cela peut-il fonctionner sans fichier physique? Il semble que j'obtienne 404 erreurs, il
me
39
Ce message a déjà une très bonne réponse de "Community wiki" et je recommande également de consulter le blog Web de Rick Strahl, il existe de nombreux bons messages sur WCF Rest comme celui-ci .
J'ai utilisé les deux pour obtenir ce type de service MyService ... Ensuite, je peux utiliser l'interface REST de jQuery ou SOAP de Java.
En fait, j'utilise uniquement Json ou Xml, mais les deux sont ici à des fins de démonstration. Ce sont des demandes GET pour obtenir des données. Pour insérer des données, j'utiliserais une méthode avec des attributs:
C'est à des fins de test. Juste pour voir si vos terminaux fonctionnent. Avez-vous regardé SoapUI? soapui.org
Darrel Miller
@TuomasHietanen - Je n'obtiens pas de réponse de type JSON en utilisant le comportement webHttp mais en utilisant enableWebScript j'obtiens une réponse de type JSON. J'ai mis ResponseFormat en tant que WebMessageFormat.Json. D'un autre côté, je ne peux pas utiliser URItemplate si j'utilise le comportement enableWebScript. Des idées?
smile.al.d.way
1
@CoffeeAddict - Pourquoi devriez-vous utiliser l'interface? Juste pour avoir une interface? Vous ne réutiliserez jamais cette interface. C'est plus simple.
Tuomas Hietanen
25
Si vous souhaitez uniquement développer un service Web unique et le faire héberger sur de nombreux points de terminaison différents (c.-à-d. SOAP + REST, avec des sorties XML, JSON, CSV, HTML). Vous devriez également envisager d'utiliser ServiceStack que j'ai construit exactement à cette fin, où chaque service que vous développez est automatiquement disponible sur les points de terminaison SOAP et REST prêts à l'emploi sans aucune configuration requise.
L' exemple Hello World montre comment créer un simple avec service avec just (aucune configuration requise):
Il est également livré avec une sortie HTML conviviale (lorsqu'il est appelé avec un client HTTP qui a Accept: text / html, par exemple un navigateur) afin que vous puissiez mieux visualiser la sortie de vos services.
La gestion de différents verbes REST est également aussi triviale, voici une application CRUD de service REST complète en 1 page de C # (moins que ce qu'il faudrait pour configurer WCF;):
Par défaut, Windows Communication Foundation (WCF) rend les points de terminaison disponibles uniquement pour les clients SOAP. Dans Comment: créer un service HTTP Web WCF de base, un point de terminaison est mis à la disposition des clients non SOAP. Il peut arriver que vous souhaitiez rendre le même contrat disponible dans les deux sens, en tant que point de terminaison Web et en tant que point de terminaison SOAP. Cette rubrique montre un exemple de procédure à suivre.
Après les comportements, la prochaine étape est les liaisons. Par exemple, basicHttpBinding vers le point de terminaison SOAP et webHttpBinding vers REST .
Enfin, nous devons définir le point final 2 dans la définition du service. Attention pour l'adresse = "" du noeud final, où le service REST n'est pas nécessaire rien.
C'est ce que j'ai fait pour que ça marche. Assurez-vous de mettre webHttp automaticFormatSelectionEnabled = "true" dans le comportement du point de terminaison.
[ServiceContract]publicinterfaceITestService{[WebGet(BodyStyle=WebMessageBodyStyle.Bare,UriTemplate="/product",ResponseFormat=WebMessageFormat.Json)]stringGetData();}publicclassTestService:ITestService{publicstringGetJsonData(){return"I am good...";}}
<endpointBehaviors><behaviorname="jsonBehavior"><webHttpautomaticFormatSelectionEnabled="true"/><!-- use JSON serialization --></behavior></endpointBehaviors>
Réponses:
Vous pouvez exposer le service dans deux points de terminaison différents. le SOAP peut utiliser la liaison qui prend en charge SOAP, par exemple basicHttpBinding, le RESTful peut utiliser le webHttpBinding. Je suppose que votre service REST sera en JSON, dans ce cas, vous devez configurer les deux points de terminaison avec la configuration de comportement suivante
Un exemple de configuration de point de terminaison dans votre scénario est
donc, le service sera disponible à
Appliquez [WebGet] au contrat d'exploitation pour le rendre RESTful. par exemple
Notez que si le service REST n'est pas en JSON, les paramètres des opérations ne peuvent pas contenir de type complexe.
Répondre au message de SOAP et RESTful POX (XML)
Pour le vieux XML pur comme format de retour, ceci est un exemple qui fonctionnerait à la fois pour SOAP et XML.
Comportement POX pour REST Plain Old XML
Points de terminaison
Le service sera disponible à
Demande REST essayez-le dans le navigateur,
Configuration du point de terminaison client de demande SOAP pour le service SOAP après l'ajout de la référence de service,
en C #
Une autre façon de le faire est d'exposer deux contrats de service différents et chacun avec une configuration spécifique. Cela peut générer des doublons au niveau du code, mais à la fin de la journée, vous souhaitez le faire fonctionner.
la source
Ce message a déjà une très bonne réponse de "Community wiki" et je recommande également de consulter le blog Web de Rick Strahl, il existe de nombreux bons messages sur WCF Rest comme celui-ci .
J'ai utilisé les deux pour obtenir ce type de service MyService ... Ensuite, je peux utiliser l'interface REST de jQuery ou SOAP de Java.
C'est de mon Web.Config:
Et voici ma classe de service (.svc-codebehind, aucune interface requise):
En fait, j'utilise uniquement Json ou Xml, mais les deux sont ici à des fins de démonstration. Ce sont des demandes GET pour obtenir des données. Pour insérer des données, j'utiliserais une méthode avec des attributs:
la source
Si vous souhaitez uniquement développer un service Web unique et le faire héberger sur de nombreux points de terminaison différents (c.-à-d. SOAP + REST, avec des sorties XML, JSON, CSV, HTML). Vous devriez également envisager d'utiliser ServiceStack que j'ai construit exactement à cette fin, où chaque service que vous développez est automatiquement disponible sur les points de terminaison SOAP et REST prêts à l'emploi sans aucune configuration requise.
L' exemple Hello World montre comment créer un simple avec service avec just (aucune configuration requise):
Aucune autre configuration n'est requise, et ce service est immédiatement disponible avec REST dans:
Il est également livré avec une sortie HTML conviviale (lorsqu'il est appelé avec un client HTTP qui a Accept: text / html, par exemple un navigateur) afin que vous puissiez mieux visualiser la sortie de vos services.
La gestion de différents verbes REST est également aussi triviale, voici une application CRUD de service REST complète en 1 page de C # (moins que ce qu'il faudrait pour configurer WCF;):
la source
MSDN semble avoir un article pour cela maintenant:
https://msdn.microsoft.com/en-us/library/bb412196(v=vs.110).aspx
Intro:
la source
Nous devons définir la configuration du comportement au point de terminaison REST
et aussi à un service
Après les comportements, la prochaine étape est les liaisons. Par exemple, basicHttpBinding vers le point de terminaison SOAP et webHttpBinding vers REST .
Enfin, nous devons définir le point final 2 dans la définition du service. Attention pour l'adresse = "" du noeud final, où le service REST n'est pas nécessaire rien.
Dans Interface du service, nous définissons l'opération avec ses attributs.
Rejoindre toutes les parties, ce sera notre définition WCF system.serviceModel.
Pour tester les deux points de terminaison, nous pouvons utiliser WCFClient pour SOAP et PostMan pour REST .
la source
C'est ce que j'ai fait pour que ça marche. Assurez-vous de mettre
webHttp automaticFormatSelectionEnabled = "true" dans le comportement du point de terminaison.
Modèle de service interne
Comportement EndPoint
la source