.NET 3.5 имеет встроенную поддержку. Для .NET 2.0 необходимы дополнительные библиотеки. Я использовал библиотеку Jayrock.
Я недавно доставил приложение, которое использует чистый Javascript в браузере (то есть с использованием технологии AJAX, но не с использованием Microsoft AJAX или Scriptaculous и т. Д.), Которое объединяется с веб-сервисами Microsoft на заднем плане. Когда я начал писать это, я был новичком в мире .NET, и меня охватили все фреймворки! Поэтому у меня возникло желание использовать коллекцию небольших библиотек, а не очень большие фреймворки.
В приложении javascript я вызываю такой веб-сервис. Он непосредственно считывает выходные данные веб-службы, обрезает разделы, отличные от JSON, а затем использует https://github.com/douglascrockford/JSON-js/blob/master/json2.js для анализа объекта JSON.
Это не стандартный подход, но он довольно прост для понимания и может быть полезен вам как для использования, так и просто для изучения веб-сервисов и 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";
}