JSON WebService в ASP.NET - PullRequest
       14

JSON WebService в ASP.NET

1 голос
/ 28 ноября 2008

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

Ответы [ 3 ]

1 голос
/ 28 ноября 2008

.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"; 
}
1 голос
/ 28 ноября 2008

Самое важное, что нужно понять, это знать, как представлять данные в формате 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.

0 голосов
/ 28 ноября 2008

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

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

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

На стороне javascript используйте обычный объект XmlHttpRequest, убедитесь, что вы отформатировали входные параметры как JSON и сделали 'eval' в выходных параметрах.

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 + ")");
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...