2008-11-28 2 views
1

Как создать веб-службу ASP.NET, которая возвращает данные в формате JSON?JSON WebService в ASP.NET

+0

В какой части вам нужна помощь - создание веб-службы или кодирование в JSON? Или оба? Это довольно разные проблемы. – dkretz 2008-11-28 05:50:15

ответ

1

Самое главное, чтобы понять, как представлять данные в формате JSON. Чтобы узнать об этом больше, обратитесь к http://www.json.org/.

Как только вы это понимаете, остальная часть довольно прямолинейна.

Пожалуйста, проверьте следующий URL-адрес для примера.

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

Я рекомендую библиотеку Jquery для этого. Это небольшая богатая библиотека, которая поддерживает вызовы веб-сервисов, обработку выходных данных формата json и т. Д.

Дополнительную информацию можно получить на сайте www.jquery.com.

1

.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"; 
} 
0

В нашем проекте требования были следующим образом - ASP.NET 2.0 на сервере, и чистый Javascript в браузере (не LIBS JQuery или .NET AJAX)

В этом случае на сервер, просто отметьте веб-метод для использования JSON. Обратите внимание, что оба входных и выходных PARAMS являются JSON отформатирован

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

С яваскрипта стороны, использовать обычный объект XmlHttpRequest, убедитесь, что вы форматировать вход Титулы, как JSON и сделать «Eval» на выходе Parms.

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 + ")"); 
    } 
} 
Смежные вопросы