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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
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 : Sélectionner tout - Visualiser dans une fenêtre à part
http://acidislands.com/betatest_webservice/MyWebServiceJSON.asmx/Add
Merci.