2008-11-28 11 views
1

Comment créer un service Web ASP.NET qui renvoie des données au format JSON?JSON WebService dans ASP.NET

+0

De quelle partie avez-vous besoin d'aide pour créer un service Web ou coder en JSON? Ou les deux? Ce sont des problèmes assez distincts. – dkretz

Répondre

1

La chose la plus importante à comprendre est de savoir représenter les données au format JSON. Pour en savoir plus, veuillez contacter le http://www.json.org/. Une fois que vous avez compris cela, la partie restante est plutôt simple.

Veuillez vérifier l'URL suivant pour un exemple de la même chose.

http://www.ajaxprojects.com/ajax/tutorialdetails.php?itemid=264 http://code.msdn.microsoft.com/JSONSampleDotNet
http://www.phdcc.com/xml2json.htm

Je recommande la bibliothèque JQuery pour cela. Il s'agit d'une bibliothèque riche et légère qui prend en charge les services Web d'appel, gère la sortie de format de données json, etc.

Référez-vous à www.jquery.com pour plus d'informations.

1

.NET 3.5 a le support intégré. Pour .NET 2.0, des bibliothèques supplémentaires sont nécessaires. J'ai utilisé la bibliothèque Jayrock.

J'ai récemment livré une application qui utilise le Javascript pur au navigateur (à savoir en utilisant la technologie AJAX, mais pas en utilisant Microsoft AJAX ou Scriptaculous etc) qui se marie avec les services Web de Microsoft à l'arrière. Quand j'ai commencé à écrire cela, j'étais nouveau dans le monde de .NET, et je me sentais dépassé par tous les frameworks disponibles! J'ai donc eu envie d'utiliser une collection de petites bibliothèques plutôt que de très grands frameworks.

Dans l'application javascript, j'appelle un service Web comme celui-ci. Il lit directement la sortie du service Web, supprime les sections non JSON, puis utilise https://github.com/douglascrockford/JSON-js/blob/master/json2.js pour analyser l'objet JSON.

Il ne s'agit pas d'une approche standard, mais elle est assez simple à comprendre et peut vous être utile, que ce soit pour l'utiliser ou simplement pour en savoir plus sur les services Web et JSON.

// enclosing html page has loaded this: 
<script type="text/javascript" src="res/js/json2.js"></script> 

// Invoke like this: 
// var validObj = = callAnyWebservice("WebServiceName", ""); 
// if (!validObj || validObj.returnCode != 0) { 
//  alert("Document number " + DocId + " is not in the vPage database. Cannot continue."); 
//  DocId = null; 
// } 


function callAnyWebservice(webserviceName, params) { 
    var base = document.location.href; 
    if (base.indexOf(globals.testingIPaddr) < 0) return; 

    gDocPagesObject=null; 

    var http = new XMLHttpRequest(); 
    var url = "http://mywebserver/appdir/WebServices.asmx/" + webserviceName; 

    //alert(url + " " + params); 

    http.open("POST", url, false); 
    http.setRequestHeader("Host", globals.testingIPaddr); 
    http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
    http.setRequestHeader("Content-Length", params.length); 
    // http.setRequestHeader("Connection", "close"); 
    //Call a function when the state changes. 
    http.onreadystatechange = function() { 
    if (http.readyState == 4) { 
     if (http.status == 200) { 

     var JSON_text = http.responseText; 

     var firstCurlyQuote = JSON_text.indexOf('{'); 
     JSON_text = JSON_text.substr(firstCurlyQuote); 
     var lastCurlyQuote = JSON_text.lastIndexOf('}') + 1; 
     JSON_text = JSON_text.substr(0, lastCurlyQuote); 

     if (JSON_text!="") 
     { 
      //if (DEBUG) 
      // alert(url+" " +JSON_text); 
      gDocPagesObject = eval("(" + JSON_text + ")"); 
     } 
     } 
     else if (http.readyState == 4) 
     {alert(http.readyState + " " + http.status + " " + http.responseText)} 
    } 
    } 

    http.send(params); 

    if (gDocPagesObject != null) { 
    //alert(gDocPagesObject.returnCode + " " + gDocPagesObject.returnString); 
    return gDocPagesObject; 
    } 
    else 
    return "web service unavailable: data not ready"; 
} 
0

Dans notre projet, les exigences sont les suivantes - ASP.NET 2.0 sur le serveur, et pur Javascript est désactivé sur le navigateur (pas libs JQuery ou AJAX .NET)

Dans ce cas, le côté serveur, marquez simplement la méthode Web pour utiliser JSON. Notez que les deux params d'entrée et de sortie sont JSON au format

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public String Foo(String p1, String p2) 
{ 
    return "Result: p1= " + p1 + " p2= " + p2; 
} 

Du côté javascript, utilisez l'objet XMLHttpRequest régulière, assurez-vous de formater votre entrée params comme JSON et faire un « eval » sur parms de sortie.

var httpobj = getXmlHttpRequestObject(); 

//Gets the browser specific XmlHttpRequest Object 
function getXmlHttpRequestObject() 
{ 
    if (window.XMLHttpRequest) 
     return new XMLHttpRequest(); 
    else if(window.ActiveXObject) 
     return new ActiveXObject("Microsoft.XMLHTTP"); 
} 


CallService() 
{ 
    //Set the JSON formatted input params 
    var param = "{'p1' : 'value1', 'p2' : 'value2'}"; 

    //Send it to webservice 
    if(httpobj.readyState == 4 || httpobj.readyState == 0) 
    { 
     httpobj.open("POST", 'service.asmx/' + 'Foo', true); 
     //Mark the request as JSON and UTF-8 
     httpobj.setRequestHeader('Content-Type','application/json; charset=utf-8'); 
     httpobj.onreadystatechange = OnSuccess; 
     httpobj.send(param); 
    } 

} 

OnSuccess() 
{ 
    if (httpobj.readyState == 4) 
    { 
     //Retrieve the JSON return param 
     var response = eval("(" + httpobj.responseText + ")"); 
    } 
}