2012-03-28 3 views
0

저는 특히 클라이언트 쪽 프로그래밍에 익숙합니다. 특히 Jquery Ajax 메서드를 사용하여 서버 쪽 메서드를 호출하는 경우가 있습니다.JSON 객체를 반환하는 서버 측 데이터 소스를 구성하는 방법은 무엇입니까?

지금까지 System.Web.Services.WebService를 사용하여 String 또는 bool을 반환하는 여러 메서드를 호스팅했습니다. 이 접근법은 "코멘트 시스템 용 메소드"와 같은 유사한 목적으로 메소드를 "그룹화"할 수 있다는 장점이 있습니다. 단점은, 내가 여러 번 읽었을 때, * .asmx 서비스가 구식이고 Json 지원이 그렇게 잘되지 않는다는 것입니다.

JSON 객체를 반환하는 메소드를 제공하는 좋은 방법은 일반 핸들러 (* .ashx)를 사용하는 것입니다. 과거에 작성한 일반적인 핸들러는 핸들러 당 하나의 "액션"을 제공했습니다. JSON 데이터 소스에 일반 핸들러를 사용하고 있습니까? 각각의 메서드가 별도의 .ashx.cs 파일에 있기 때문에 메서드를 "그룹화"할 수 없다는 단점이 있습니다. (나는 어떤 "행동"이 호출되어야 하는지를 결정하는 두 번째 주장을 전달할 수 있지만, 어떻게 든 옳다고 느끼지는 않는다는 것을 알고있다).

WCF 서비스를 사용하는 것은 현재로서는 가치가없는 옵션입니다. 왜냐하면 내가 사용하는 메서드가 세션에 대한 액세스를 필요로하고 동일한 목적에 맞도록 서비스를 조정하는 것이 과잉이라고 할 수 있기 때문입니다.

실제 질문은 다음과 같습니다. 서비스 측 메소드의 가독성/구조를 유지하면서 JSON 객체/JSON 객체 목록을 반환하는 현대적인 방법은 무엇입니까?

편집 : 나는 웹 서비스와 함께 다루고 싶어요 내가 사용 웹 양식 4.0

+1

ASP.NET MVC를 보셨습니까? 컨트롤러 메서드에서 Json 결과를 반환하기위한 훌륭한 기본 제공 지원을 제공합니다. –

+0

@EricPetroelje : 잠시만. 현재 작업하고있는 프로젝트는 Webforms 프로젝트입니다. 나는 Webforms와 MVC를 섞을 수 있다는 것을 알고있다. 그러나 재미있는 소리. "그룹핑"을위한 클래스와 ActionResult를 반환하는 여러 메소드를 사용하도록 조언 해 주시겠습니까? – citronas

+0

실제로 컨트롤러 동작에서 JSON을 반환하기 위해 MVC에 내장 된'JsonResult' 클래스가 있습니다 : http://msdn.microsoft.com/en-us/library/system.web.mvc.jsonresult.aspx – CAbbott

답변

1

는 내가 JSON에 문제가 그들로부터 반환되는 적이 없었습니다. jQuery로 Ajax를 사용하면

$.ajax({ 
     type: "POST", 
     url: "/Methods/Zipcodes.asmx/GetPOIMarkersFrontendByTypeAndZip", 
     data: "{latlng: '" + lat + "," + lng + "', type: '" + type + "', distance: '" + distance + "'}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(html) { 
     } 
    } 

는 웹 서비스

[WebMethod] 
    public object GetPOIMarkersFrontendByTypeAndZip(string latlng, string type, string distance) 
    { 
     var db = new SQLConnectionDataContext(); 

     string[] zip = latlng.Split(','); 
     IQueryable<POI> points = db.POIs; 
     int dist = string.IsNullOrEmpty(distance) ? 0 : Convert.ToInt32(distance); 

     List<POI> poi = type == "0" 
          ? points.ToList() 
          : points.Where(p => p.poiTypeId == Convert.ToInt32(type)).ToList(); 

     return (from item in poi 
       where !string.IsNullOrEmpty(item.Lat) && !string.IsNullOrEmpty(item.Lng) 
       let dDist = 
        DoCalc(Convert.ToDouble(zip[0]), Convert.ToDouble(item.Lat.Trim()), Convert.ToDouble(zip[1]), 
          Convert.ToDouble(item.Lng.Trim())) 
       where dDist <= dist 
       select new GoogleMapMarker 
          { 
           lat = item.Lat, 
           lng = item.Lng, 
           data = FpsFunctions.IsLanguageFrench() ? item.fr : item.gb, 
           tag = item.poiTypeId.ToString() 
          }).ToList(); 
    } 

나 사용이 4 개 변수와 JSON 배열을 반환 데이터를 전달하는 간단한 예는 간단하다. 한 번도 문제가 없었으며 ASP.NET이 허용하는 것처럼 HTML 사이트에 데이터를 즉시 채울 수 있습니다. 그냥 당신이 머리에 둥근 jQuery있어 :)

1

나는이 일을 훨씬 쉽게 만드는 MVC로 이동했습니다. 그러나 WebForms에서이 작업을 수행 할 때 액션 매개 변수를 사용하는 하나 이상의 핸들러 (ASHX)를 사용합니다. 그런 다음 action 매개 변수가 응답을 처리 할 적절한 대상 메소드를 호출하여 평가됩니다.

이 경로를 사용하면 모든 파일의 고민을 해결할 수 있습니다. 그리고 아약스 호출에 action 매개 변수를 지정해야 할 때 잃는 것은 다른 파일 이름을 지정하지 않아도됩니다.

1

내가 ASP.NET 웹 API는 쉽게 HTTP를 포함하여 고객의 넓은 범위에 도달 서비스를 구축 할 수있는 프레임 워크가

http://www.asp.net/web-api

웹 API보고 제안 브라우저 및 휴대 기기 ASP.NET 웹 API는 .NET Framework에서 RESTful 응용 프로그램을 빌드하는 데 이상적인 플랫폼입니다.

관련 문제