2010-10-07 5 views
4

J'ai passé les derniers jours à être frustré avec WCF, donc j'ai décidé de poster de l'aide ici parce que ... eh bien .. Je n'ai pas la moindre idée où pour commencer! .. toute aide serait appréciée! Premièrement: Lors de la création d'un service WCF dans .Net 4.0, quel modèle dois-je utiliser si je souhaite créer un service qui accepte les données d'un POST AJAX à l'aide de JQuery? (J'aimerais pouvoir avoir un Global.asax si possible). Deuxièmement: Mon service fonctionne correctement dans le client de test WCF. Cependant, lorsque je parviens à le faire accepter des requêtes GET, le client test arrête d'afficher les méthodes de service. Les méthodes POST semblent simplement refuser de fonctionner purement et simplement. Je voudrais développer un service WCF qui fonctionnera sur un serveur IIS que je peux raccorder à partir de l'une de mes applications via un appel JQuery Ajax. Si quelqu'un a un tutoriel qui me pointe dans la bonne direction, ce serait très apprécié car je n'ai pas pu trouver quoi que ce soit sur WCF en utilisant .Net 4, ça marche.MVC, WCF ASP.NET 4.0 & JQUERY

Vive

+0

Y at-il raison en particulier que vous souhaitez utiliser WCF ? Si votre service ne sera utilisé que par les requêtes jQuery, vous pouvez simplement utiliser un contrôleur dans votre application MVC. Il y a beaucoup d'exemples sur la façon de faire ce travail avec MVC pur sans jouer avec WCF mais peut-être vous avez d'autres exigences qui vous obligent à utiliser WCF (?) –

+0

Bonjour Hector, Nous voulions avoir un service hébergé que beaucoup de nos différentes applications pourraient se connecter, de différentes manières, pas seulement à JQuery. JQuery était juste la méthode que j'essayais de mettre au travail. – Zack

Répondre

6

La première chose que vous devriez considérer est la restriction same origin policy. Si vous n'êtes pas en mesure de vous y conformer et que votre service Web n'est pas hébergé sur le même domaine que le script AJAX consommant, vous pouvez arrêter de lire ma réponse ici et repenser votre architecture.

Si vous vous pouvez lire encore commencer par définir le contrat de service et la mise en œuvre comme d'habitude:

[ServiceContract] 
public interface IFoo 
{ 
    [OperationContract] 
    string GetData(int value); 
} 

public class FooService : IFoo 
{ 
    public string GetData(int value) 
    { 
     return string.Format("You entered: {0}", value); 
    } 
} 

vous ajoutez ensuite un fichier fooservice.svc qui exposera le service dans IIS:

<%@ ServiceHost 
    Language="C#" 
    Debug="true" 
    Service="SomeNs.FooService" 
    CodeBehind="FooService.svc.cs" 
    Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory" 
%> 

La dernière ligne Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory" est extrêmement importante car c'est ce qui vous permettra d'utiliser JSON.

La dernière partie est web.config:

<system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior> 
       <serviceMetadata httpGetEnabled="true"/> 
       <serviceDebug includeExceptionDetailInFaults="false"/> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
</system.serviceModel> 

Et enfin une page HTML demande d'envoi AJAX pour consommer le service:

<!DOCTYPE html> 
<html> 
<head> 
    <title>WCF Test</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
    <script type="text/javascript" src="http://www.json.org/json2.js"></script> 
    <script type="text/javascript"> 
     $(function() { 
      $.ajax({ 
       // Notice the URL here: Need to be hosted on the same domain 
       url: '/fooservice.svc/getdata', 
       type: 'post', 
       contentType: 'application/json; charset=utf-8', 
       data: JSON.stringify({ value: 7 }), 
       success: function (result) { 
        alert(result.d); 
       } 
      }); 
     }); 
    </script> 
</head> 
<body> 

</body> 
</html> 
+0

Cheers mate, je n'étais pas au courant de la même politique d'origine. Informations très utiles! Excellente réponse! Merci beaucoup! – Zack