webService JSON : problème lors de l'appel depuis un autre site
Bonjour,
Je suis désolé si cette question a déjà été posé, mais je bloque depuis plusieurs jours et malgré mes recherches, la réponse ne m'a pas sauté aux yeux (je suis nouveau à propos de IIS et ASP.net, je connais mieux apache/php)
Je suis en train de tester un site en mutualisé Windows chez OVH (cette offre .NET Framework:4.0 ASP.NET:4.0)
J'ai écrit en C# un petit webservice de test (asmx), le classique Add(a,b) qui renvoi la somme. J'interroge mon webservice depuis une appli cliente en C# sur mon PC et tout fonctionne à merveille en SOAP.
Maintenant je veux tester la même chose en JSON. Et la, ça fonctionne moins bien. Après beaucoup de recherches j'ai obtenu quelques améliorations, mais je n'arrive à faire fonctionner le webservice qu'en JavaScript depuis une page hébergée sur le même serveur.
Code C# du webservice ASP.net :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <%@ WebService Language="C#" class="MyWebServiceJSON" %>
using System.Web.Services;
using System.Web.Script.Services;
[WebService(Namespace="http://acidislands.com/betatest_webservice/")]
[ScriptService]
public class MyWebServiceJSON
{
[WebMethod(Description = "Add(a,b) return a + b")]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public int Add( int a, int b)
{
return a + b ;
}
} |
Code HTML/JavaScript qui fonctionne sur le site mais pas depuis mon PC ni un autre site web :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>test_json_jquery</title>
<script type="text/javascript" src="jquery-1.7.min.js"></script>
<script type="text/javascript">
$(document).ready(function()
{
$('#dyn_content').html('in progress...');
a = Math.round(Math.random() * 10);
b = Math.round(Math.random() * 10);
$.ajax(
{
type: "POST",
url: "http://acidislands.com/betatest_webservice/MyWebServiceJSON.asmx/Add",
data: "{'a':'"+a+"','b':'"+b+"'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg)
{
console.log('success');
// Insert the returned HTML into the <div>.
$('#dyn_content').html("Add("+a+","+b+") = "+msg.d);
},
error: function(jqXHR, textStatus, errorThrown)
{
$('#dyn_content').html('error : ', textStatus);
console.log('error : ', textStatus);
},
complete: function(jqXHR, textStatus)
{
console.log('complete : ', textStatus);
}
});
});
</script>
</head>
<body>
Test JSON jQuery<br/>
<br/>
<div id="dyn_content">
...
</div>
</body>
</html> |
J'ai l'impression qu'il y a quelque chose à faire du coté du web.config pour autoriser l'appel du webservice depuis l'extérieur, mais je ne trouve pas la solution.
J'ai testé ça, mais sans succès :
Code:
1 2 3 4 5 6 7 8 9
| <!-- Fichier de configuration Web.Config -->
<configuration>
<system.web>
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" type="System.Web.Script.Services.ScriptHandlerFactory" validate="false"/>
</httpHandlers>
</system.web>
</configuration> |
Pour info, en JavaScript, même avec FireBug je ne sais pas trop ce que répond le webservice quand ça ne marche pas. Par contre avec mon application en C# si j’essaie d'envoyer ma requête en JSON, je reçois en résultat une string qui contient une page web avec en titre :
Citation:
Le format demandé n'est pas reconnu pour l'URL se terminant par '/Add'.
C'est la même page web que celle qui s'affiche quand on affiche l'URL suivante avec son navigateur :
Code:
http://acidislands.com/betatest_webservice/MyWebServiceJSON.asmx/Add
Merci.