2010-06-15 7 views
1

J'ai un service WCF simple que j'appelle côté serveur du code derrière via une référence de service. Il est utilisé pour la validation et fonctionne et a été automatiquement installé par Visual Studio et utilise SOAP parce que la liaison est wsHttpBinding.WCF - appel du même service côté client et côté serveur

Je souhaite utiliser le même service WCF, mais appelez-le côté client à partir de jQuery en utilisant ajax(). J'essaie de l'implémenter au moyen de ces instructions. Mais si je fais les changements pour faire fonctionner l'appel côté client, je dois ajouter la décoration ci-dessous qui, je pense, va casser ce qui fonctionne du côté serveur et aussi changer la section system.serviceModel dans web.config.

[WebInvoke(Method = "POST", 
    BodyStyle = WebMessageBodyStyle.Wrapped, 
    ResponseFormat = WebMessageFormat.Json, 
    RequestFormat= WebMessageFormat.Json) ] 

Comment puis-je avoir un service WCF qui peut être appelée à la fois du côté serveur et côté client (jQuery/ajax)?

Ou en d'autres termes, cela peut être incorrectement formulé, un point d'extrémité peut-il avoir plusieurs liaisons?

Répondre

0

Un point final dans WCF a un ABC

  • Adresse
  • Reliure
  • contrat

Ainsi donc: non, un seul point final ne peut pas avoir plusieurs liaisons. Mais vous pouvez avoir plusieurs points de terminaison pour le même contrat! Donc, si vous voulez exposer deux méthodes avec essentiellement la même fonctionnalité sur SOAP et REST, vous devez avoir deux points de terminaison.

Vous pouvez définir votre propre méthode de service pouvant être appelée à la fois à partir de SOAP et de REST, comme indiqué dans le lien que vous avez mentionné.

Ce que vous devez donc deux points d'extrémité distincts:

<services> 
    <service name="YourService"> 
    <endpoint 
      address="http://YourServer/YourVirtualDir/YourService.svc" 
      binding="wsHttpBinding" 
      contract="IYourService" /> 
    <endpoint 
      address="http://YourServer/YourVirtualDir/YourService2.svc" 
      binding="webHttpBinding" 
      behaviorConfiguration="webCallable" 
      contract="IYourService" /> 
    </service> 
</services> 

Vous devez définir un comportement de point de terminaison qui comprend le comportement <webHttp/> - ou vous devez avoir un fichier * .svc qui utilise le WebServiceHost (au lieu de ServiceHost) pour héberger votre service REST. Comme vous pouvez le voir, vous avez maintenant deux points de terminaison distincts (avec deux fichiers * .svc séparés dans un répertoire virtuel), deux adresses distinctes - mais les deux partagent le même contrat (définissent les mêmes opérations).

+0

Merci. Je n'ai pas explicitement défini ou défini quoi que ce soit qui ait mentionné REST. Est un service REST par défaut si vous n'utilisez pas SOAP/xml lorsque vous utilisez WCF? – Steve

+0

WebInvoke = REST. Et oui - soit votre service utilise SOAP, ou alors il utilise REST - ce sont les deux styles de faire des appels de service Web. –

+0

Encore une question - si j'ai deux fichiers svc, je dois dupliquer l'implémentation du contrat, non? Est-il possible d'avoir deux points de terminaison avec un seul fichier svc? – Steve

Questions connexes