WS .Net4 Json consommé par JQuery en cross domain
Bonjour à tous !
Je souhaite exposer un WebService JSon développé en C#.net4 (.asmx) et le consommer via une page web d'un autre domaine en JQuery (cross domain).
Plusieurs petits probleme se posent, et au final je ne sais pas exactement comment résoudre les erreurs...
Pour commencer voici le WebService :
Code:
1 2 3 4 5 6
| [WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json, XmlSerializeString = false)]
public String GetJSon()
{
return new JavaScriptSerializer().Serialize(GetMyObjects());
} |
Par ailleurs, dans le web.config j'ai ajouté
Code:
1 2 3 4 5
| <webServices>
<protocols>
<add name="HttpGet"/>
</protocols>
</webServices> |
Le WS fonctionne bien lorsque je l'appel en local avec ce code Jquery (TEST1) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| $.ajax({
//crossDomain: true,
type: "POST",
url: "URL_OF_WS/API.asmx/GetJSon",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
DoSomeThing(data.d);
},
error: function (msg) {
alert(msg.statusText);
}
}); |
Le WS renvoi cette chaine : [{"Param1":1,"Param2":"MonParam2"}]
Parfait, mais lorsque je test en domain distant (cross domain), j'ai mon alerte qui m'affiche simplement "Erreur" sans plus d'informations.
Que je mette crossDomain à true ou false, j'ai la meme problematique.
Aurais-je un moyen de connaitre exactement l'erreur levé lorsque je suis en cross domain, ou plus simplement, est-ce que je fais quelque chose de mal ? ^^
Pour creser un peu, retour en local cette fois-ci, j'essai ce bout de code, mais une erreur est remonté (TEST2) :
Code:
1 2 3 4
| $.getJSON('URL_OF_WS/API.asmx/GetJSon',
function (data) {
alert(data.d);
}).error(function () { alert("error getJSON"); }); |
Et là, les info retournées par le WS sont :
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://www.alapub.com/">[{"Param1":1,"Param2":"MonParam2"}]</string>
Donc peut etre que mon premier appel (TEST1) en cross domain leve une erreur à cause du parsing impossible ?
Toujours pour aller plus loin, j'ai essayé de parser moi meme la chaine retournée lorsqu'il y a une erreur, avec ce code :
Code:
1 2 3 4 5 6
| jQuery(document).ajaxError(function (event, request, settings) {
var var1 = request.responseText.substring(79);
var var2 = var1.lastIndexOf("</string>");
var var3 = var1.substring(0, var2);
alert(var3);
}); |
J'ai enfin ma chaine attendu : [{"Param1":1,"Param2":"MonParam2"}] !!
Je test donc en disant (cross domain), mais je me retrouve encore avec un probleme puisque request.responseText n'existe pas.
Je me retrouve donc à mon point de départ.
J'espere avoir été clair dans l'explication de ma démarche, si vous avez des pistes, des liens ou des explications, elles sont les bienvenues :)