IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Services Web Discussion :

webService JSON : problème lors de l'appel depuis un autre site


Sujet :

Services Web

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 223
    Points : 401
    Points
    401
    Par défaut 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 : 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.

  2. #2
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 223
    Points : 401
    Points
    401
    Par défaut
    Bon, finalement j'ai réussi à faire fonctionner ce que je voulais, mais ça n'a pas été facile.

    Pour appeler le webService depuis un autre site en javascript, je n'ai pas encore tout compris. Il y des restrictions en rapport avec la "Same origin policy" et j'ai des différences de comportement selon le navigateur. Mon exemple en javascript avec jQuery refuse de faire un "POST" des données si je suis ailleurs que sur le site du webservice, sauf avec IE qui affiche un popup de sécurité et propose l'envoi des données.
    J'ai aussi ajouté ça au web.config du serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <configuration>
    	<system.webServer>
    		<httpProtocol>
    			<customHeaders>
    				<add name="Access-Control-Allow-Origin" value="*" />
    			</customHeaders>
    		</httpProtocol>
    	</system.webServer>
    </configuration>
    Par contre, pour ce qui est de mon programme client en C#, le problème venait d'une erreur de syntaxe ("contentType" au lieu de "Content-Type" dans le header)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/01/2012, 10h26
  2. Problème lors de l'appel d'une fonction Tsql
    Par mobscene dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 23/07/2007, 16h56
  3. [MySQL] problème lors de l'appel d'une fonction
    Par jexl dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 27/06/2007, 10h53
  4. Problème lors de l'appel d'une procédure stockée
    Par ToxiZz dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 22/05/2006, 00h42
  5. [POO] Problème lors de l'appel d'une propriété d'un objet.
    Par akecoocoo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 24/08/2005, 09h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo