2013-03-02 3 views
0

J'essaie de consommer une API de repos wcf dans un projet asp.net en utilisant jquery. pour ce faire, j'ai fait:Consommez WCF Rest Service dans ASP.net en utilisant jquery

  1. Créé un code source de service WCF Rest peut être téléchargé à partir here.
  2. Créé un projet ASP.Net pour consommer que restAPI en utilisant jquery. code source here.

Dans le projet ASP .Net, cliquez sur le bouton J'essaie d'appeler un service REST. Mais chaque fois que j'obtient deux questions:

  1. appelant var jsondata = JSON.stringify(request); dans TestHTML5.js renvoie une erreur en disant « erreur d'exécution Microsoft JScript: « JSON » est pas défini »

  2. Lorsque je presse l'ignorer continue vers l'appel API de repos WCF, mais il renvoie toujours la fonction d'erreur (introuvable). L'API Rest n'est jamais appelée.

Merci de votre aide à l'avance.


RÉPONSE: Solution et lien source se trouve sur cette link.

+0

Avec quelles navigateurs et navigateurs testez-vous? L'objet JSON n'est pas disponible dans IE7 – Tung

+0

J'utilise IE9. le même problème ne se produit pas pour IE10 dans Windows 8. Cela fonctionne (aucune erreur de Json) parfaitement bien. – nishantcop

+0

Assurez-vous que votre page n'est pas affichée en mode quirks, ni en [mode de compatibilité] (http://www.sevenforums.com/tutorials/1196-internet-explorer-compatibility-view-turn-off.html). Si vous voulez soutenir ces modes de fonctionnement, alors la suggestion de Sharrooz devrait fonctionner. Voir la réponse [ici] (http://stackoverflow.com/questions/5339232/json-is-undefined-error-in-javascript-in-internet-explorer) – Tung

Répondre

1

J'ai regardé l'exemple de code que vous avez fourni et le problème est que vous violez la same origin policy restriction. Vous ne pouvez pas effectuer d'appels AJAX interdomaines. Dans votre exemple, le service est hébergé sur http://localhost:35798 et l'application Web l'appelle http://localhost:23590, ce qui n'est pas possible. Vous devrez héberger le service et l'application appelante dans le même projet ASP.NET. Vous semblez avoir tenté d'activer CORS du côté client en utilisant ($.support.cors = true;) mais sur votre service ne prend pas en charge CORS. Un autre problème rencontré avec votre page d'appel (TestHTML5.htm) est le fait que vous avez inclus jquery deux fois (une fois la version réduite et une fois la version standard) et que vous avez inclus votre script() après jquery. Vous devriez corriger vos références de script. Et encore un autre problème est la ligne suivante <script type="text/javascript"/> qui est invalide.

Donc, commencer par la fixation de votre balisage (j'ai enlevé tout le bruit CSS que vous aviez dans votre balisage afin de se concentrer sur les parties importantes):

<!DOCTYPE html> 
<html dir="ltr" lang="en" xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta charset="utf-8" /> 
    <title>SignUp Form</title> 
    <script type="text/javascript" src="../Scripts/jquery-1.7.2.min.js"></script> 
    <script type="text/javascript" src="../Scripts/TestHTML5.js"></script> 
</head> 
<body> 
    <button id="Send" onclick="testHTML5OnClick();"> 
     Send Me ID! 
    </button> 
</body> 
</html> 

puis dans votre TestHTML5.js vous pouvez aussi nettoyer un un peu. Par exemple votre service écoute le modèle d'URL suivant json/{id} et n'accepte que les verbes GET et vous essayez d'utiliser POST ce qui n'est pas possible. En plus de cela, vous essayez d'utiliser la méthode JSON.stringify qui n'a aucun sens avec le verbe GET. Vous devriez simplement envoyer l'identifiant dans le cadre de la partie url que vous avez définie dans votre service.

function testHTML5OnClick() { 
    var id = 5; 
    var url = "../RestServiceImpl.svc/json/" + id; 
    var type = 'GET'; 
    callLoginService(url); 
} 

function callLoginService(url, type) { 
    $.ajax({ 
     type: type, 
     url: url, 
     success: serviceSucceeded, 
     error: serviceFailed 
    }); 
} 

function serviceSucceeded(result) { 
    alert(JSON.stringify(result)); 
} 

function serviceFailed(result) { 
    alert('Service call failed: ' + result.status + '' + result.statusText); 
} 
+0

Parfait explication Darin. Ca fait la magie :-) Très bien expliqué point à point. Je suis nouveau à tout cela donc ayant tous ces défauts. Je reviendrai peut-être vérifier plus de choses avec vous plus tard quand j'en aurai fini avec mon expérimentation. pour l'instant je vous remercie beaucoup pour la chose exacte que je cherchais. – nishantcop

+0

Salut Darin, Une question rapide est que si nous hébergeons une API REST basée sur WCF et il y a une autre application (peut-être en Java, ou toute autre plateforme) qui utilise HTML5 simple et jquery, ne peuvent-ils prendre l'avantage de cette RIA WCF? – nishantcop

+0

Étant donné que votre service WCF REST traite des formats interopérables tels que XML et JSON, il n'y a absolument aucun problème à le consommer depuis d'autres plateformes. –

1

Avez-vous ajouté cette référence?

script type="text/javascript" src="../../json.js"></script> 

J'ai même problème et recherche obtenu this et ce result

+0

Merci, il semble bien fonctionner avec IE10 (Windows 8) problème que j'avais avec IE9 dans win7. Cependant, avez-vous une idée du 2e problème qui semble être plus gênant. merci pour tout le monde aider à l'avance – nishantcop

Questions connexes