2008-08-26 2 views
5

저는 회사 응용 프로그램에서 상당히 Ajax 무거운 기능을 시작하려고합니다. 내가해야할 일은 사용자가 페이지에 몇 분 간격으로 Ajax 콜백을 작성하는 것입니다.전체 PostBacks가없는 ASP.NET JavaScript 콜백?

  • 콜백 전, 후 또는 도중 DOM 업데이트를 수행 할 필요가 없습니다.
  • 어쨌든 항상 요청과 함께 보내야하는 사이트 쿠키와 ID 값과 같은 정보는 페이지에서 필요하지 않습니다.

내가 궁금한 점은 페이지의 나머지 정보를 게시하지 않고 ASP.NET 페이지에 JavaScript Ajax 콜백을 만들 수있는 간단하고 명확한 방법이 있는지 여부입니다. 나는 가능하다면 이것을 할 필요가 없다.

저는 페이지에서 단 하나의 메소드를 호출 할 수 있기를 원합니다.

또한 ASP.NET 2.0으로 제한되어 있으므로 새로운 3.5 프레임 워크 ASP AJAX 기능을 사용할 수 없지만 2.0 A 프레임 워크의 ASP AJAX 확장을 사용할 수는 있습니다. 내가 찾고 정확히 것으로 보인다

UPDATE는
나는 DanP의 대답을 수락하기로 결정했습니다. 우리 사이트에서는 이미 jQuery를 사용하고 있기 때문에 jQuery를 사용하여 요청을하게 될 것입니다. 경험상 ASP의 AJAX 프레임 워크보다 훨씬 나은 성능을 보이는 것 같습니다.

데이터를 IHttpHandler로 전송하는 가장 좋은 방법은 무엇이라고 생각하십니까? 쿼리 문자열에 변수를 추가하거나 보내야하는 데이터를 POST해야합니까?

내가 보내야 할 유일한 것은 단일 ID이지만 ID를 보내고 IHttpHandler가 처리하는 가장 좋은 방법을 결정할 수 없습니다. 기본 컴퓨터 기술을 가진 사람이 실수로 또는 의도적으로 페이지에 직접 액세스하거나 요청을 반복하는 것을 방지하는 솔루션을 찾고 싶습니다. 이것이 가능한가?

답변

6

당신이 빈 페이지를 생성하지 않으려면, 당신은을 IHttpHandler (ASHX) 파일을 호출 할 수 있습니다

public class RSSHandler : IHttpHandler 
    { 
     public void ProcessRequest (HttpContext context) 
     { 
      context.Response.ContentType = "text/xml"; 

      string sXml = BuildXMLString(); //not showing this function, 
      //but it creates the XML string 
      context.Response.Write(sXml); 
     } 

     public bool IsReusable 
     { 
      get { return true; } 
     } 

    } 
2

ASP.NET AJAX에만 국한되지 않고 jQuery, YUI 등과 같은 타사 라이브러리를 사용하여 동일한 작업을 수행 할 수 있습니다. 그런 다음 쿠키가 포함 된 헤더를 반환해야하는 사이트의 빈 페이지를 요청할 수 있습니다.

-1

당신은 또한 asp.net 아약스 라이브러리에 내장 된 웹 메쏘드를 사용할 수 있습니다. 페이지의 코드 숨김에 정적 메서드를 만들고 Ajax에서 호출하면됩니다.

here

-1

당신은 웹 서비스 (이 .asmx)를 사용한다 수행하는 방법에 대한 아주 기본적인 예제가있다. Microsoft의 ASP.NET AJAX를 사용하면 스텁을 자동으로 생성 할 수도 있습니다.

2

내 투표뿐만 아니라 HttpHandler를 제안 함께. 나는 이것을 자주 사용한다. 페이지 클래스의 인스턴스를 호출하지 않기 때문에 매우 가볍습니다.

ASP.NET AJAX 프레임 워크의 모든 트릭은 실제로 백엔드에서 호출 당 전체 페이지를 다시 인스턴스화하고 생성하므로 거대한 리소스 돼지입니다.

그러므로 내 전형적인 스타일 인 XmlHttpRequest가 HttpHandler로 돌아갑니다.

3

데이터를 IHttpHandler로 전송하는 가장 좋은 방법은 무엇이라고 생각하십니까? 쿼리 문자열에 변수를 추가해야합니까? 아니면 POST를 보내야합니까? 내가 보내야 할 유일한 것은 하나의 ID이지만, ID를 보내고 IHttpHandler가 처리하는 가장 좋은 방법은 무엇인지 결정할 수 없습니다. 실수로 또는 의도적으로 직접 콜백을 고려

는 클라이언트 코드에 묻혀 페이지에 액세스하는 기본적인 컴퓨터 기술을 가진 사람을 방지 할 수있는 솔루션을 마련하고 싶습니다, 그것은 동일한 결정을 가진 사람을 것입니다 querystring 또는 POST 요청을 가져옵니다. 인터넷 익스플로러, 파이어 버그가 있다면, 똑같이 망쳐 버릴거야.

그래서, 그 중에서도 가장 쉬운 것은 무엇이든하십시오. (힌트 : 나는 단지 쿼리를 사용합니다).

반복 요청/직접 액세스를 처리하려면 각 요청과 함께 전송되는 키를 생성해야합니다. 아마도 현재 시간의 해시 (퍼지, 네트워크 대기 시간으로 인한 초가 아닌 몇 분으로 내려갈 것입니다) + 클라이언트 IP입니다.

그런 다음 HTTPHandler에서 동일한 해시를 수행하고 일치하는 경우에만 실행하십시오.

1

ASP.NET 2.0 만 사용하고 있으므로 .ashx 파일을 만드는 AjaxPro을 사용하는 것이 좋습니다. AjaxPro.dll을 웹 사이트로 가져 오기만하면됩니다. AjaxPro으로 전체 응용 프로그램을 개발했으며 매우 잘 작동하는 것으로 나타났습니다. 직렬화를 사용하여 객체를 앞뒤로 전달합니다.

이것은 단순히 사용하는 방법에 대한 샘플입니다.

namespace MyDemo 
{ 
    public class Default 
    { 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     AjaxPro.Utility.RegisterTypeForAjax(typeof(Default)); 
    } 

    [AjaxPro.AjaxMethod] 
    public DateTime GetServerTime() 
    { 
     return DateTime.Now; 
    } 
    } 
} 

그것은 또한받는

을 추가 할 필요가 간단

편집

function getServerTime() 
{ 
    MyDemo._Default.GetServerTime(getServerTime_callback); // asynchronous call 
} 

// This method will be called after the method has been executed 
// and the result has been sent to the client. 

function getServerTime_callback(res) 
{ 
    alert(res.value); 
} 

같다 자바 스크립트를 통해 호출하려면 config. AjaxPro는 APS.NET Ajax와도 잘 작동하며 클래스가 [Serializable]로 표시된 경우 Client에서 Sever로 C# 객체를 전달할 수 있습니다.

1

다른 관점을 제공하기 만하면 PageMethod를 사용할 수도 있습니다. 메인 페이지. Dave Ward는 illustrates이라는 멋진 게시물을 가지고 있습니다.기본적으로 당신은 데이브의 게시물에 도시 된 바와 같이, 메소드를 호출하는 jQuery를 아약스 게시물을 사용

$.ajax({ 
    type: "POST", 
    url: "Default.aspx/GetFeedburnerItems", 
    // Pass the "Count" parameter, via JSON object. 
    data: "{'Count':'7'}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
     BuildTable(msg.d); 
    } 
    }); 

필요 없음을 Asp.Net 아약스 확장에 전혀.