이번에는 Ajax.Net ( 이하 Ajax ) 이 제시한 두가지 콜백 방법의 차이에 대해서 알아봅시다.
예제에 필요한 DLL 을 다운 받기 위해서 다음의 사이트에서 다운 받으실수 있습니다.
http://ajax.schwarz-interactive.de/csharpsample/default.aspx
 
다운받은 DLL 을 프로젝트에 참조시킵니다.
 
다음은 Web.Config 파일에 다음의 구문을 추가 합니다.
<system.web>
<httpHandlers>
<addverb="*"path="*.ashx"type="AjaxPro.AjaxHandlerFactory,AjaxPro.2"/>
</httpHandlers>
</system.web>
 
이제 기본 설정은 모두 마쳤습니다.
 
이번에도 여과없이 예제 샘플부터 보도록 하겠습니다.
publicpartialclassAjaxNet : System.Web.UI.Page
{
        protectedvoid Page_Load(object sender, EventArgs e)
        {
               AjaxPro.Utility.RegisterTypeForAjax( typeof(AjaxNet) );
 
               TextBox1.Attributes["OnKeyPress"]    = txtChange1(this)";
               TextBox2.Attributes["OnKeyPress"]    = txtChange2(this)";
        }
 
        [AjaxPro.AjaxMethod]
        publicstring GetMessage()
        {
               System.Threading.Thread.Sleep(1000);
               return"메서드가 호출되었습니다";
        }
} 
 
AjaxPro.Utility.RegisterTypeForAjax( typeof(AjaxNet) ); 의 구문으로 비동기 호출 대상 클래스를 등록할 수 있습니다. This.GetType() 과 같이 지정하신다면 정상적으로 작동되지 않습니다.
 
TextBox1.Attributes["OnKeyPress"]    = "txtChange1(this)";
TextBox2.Attributes["OnKeyPress"]    = "txtChange2(this)";
 
TextBox 에 밑의 html 소스에 포함되는 자바스크립트를 이벤트에 연결합니다.
 
GetMessage() 메서드는 콜백 받기 위한 메서드로 호출되면 1초의 쓰레드 Sleep을 주고 string을 리턴합니다
 
HTML 소스는 다음의 같습니다.
 
<headrunat="server">
    <title>제목 없음</title>
    <scripttype="text/javascript">
               function txtChange1( obj )
               {
                       if( obj.value.length == 9 )
                       {
                              alert( AjaxNet.GetMessage().value );
                       }
               }             
               function txtChange2( obj )
               {
                       if( obj.value.length == 9 || obj.value.length == 10)
                       {
                              AjaxNet.GetMessage(txtChange2_Callback);
                       }
               }             
               function txtChange2_Callback( response )
               {
                       var obj = response.value;
                       if( obj != null && typeof(obj) == "string" )
                       {
                              alert( obj );
                       }
               }
    </script>
</head>
<body>
    <formid="form1"runat="server">
    <div>
               <asp:TextBoxID="TextBox1"runat="server"MaxLength="100"></asp:TextBox>
               <p></p>
               <asp:TextBoxID="TextBox2"runat="server"MaxLength="100"></asp:TextBox>
    </div>
    </form>
</body>
 
 
(OnKeyPress 는 키보드가 눌려지는순간 발생하므로 10번째 텍스트부터 콜백이 일어납니다)
소스가 완성되었다면 각각 텍스트 박스에서 아무 알파벳을 꾸욱 누르고 계셔 보세요.
 
1. AjaxNet.GetMessage().value
 이 메서드가 호출되는 순간 스레가 1초 쉬고, 리턴받은string 을 보여줍니다.
 보시는 바와 같이 콜백이 모두 완료될때까지 클라이언트는 아무 것도 못합니다.
 마치, 컴퓨터가 잠깐 먹통이 된 듯 콜백이 완전히 종료되야 다음 텍스트가 눌러지는
 것을 확인할 수 있습니다.
 
2. AjaxNet.GetMessage(txtChange2_Callback);
 두번째 텍스트 박스의 함수는 Callback 과 매핑되어 있습니다.
 이상하게 1번 방법의 호출과는 상당히 다른 결과를 보여줍니다.
 눈치빠른 분이라면 잠깐 멈찟 하는듯 하나 키보드로 누른 텍스트는 이내 쭈욱 써지는
 것을 확인할 수 있습니다.
 
 
 이렇게 상이한 결과에 대해 많이 궁금하여 여러 문서를 검색해 보았으나, 그 이상의 해답을 찾지 못하였습니다.^^;
추측건데, 2번 경우의 호출은 단지 호출만 할뿐 Callback 에 대해선 txtChange2_Callback에게 위임하게 되고, 1번의 경우 호출과의 매핑된 콜백이 없기 때문에, 콜백이 완료되기 전까지 무한 대기 상태에 빠지는 듯 합니다.
 
다음에 또 기회가 된다면 보안적인 요소가 강화된 AjaxPro 에 추가된 AjaxEnum,AjaxProperty, 캐시,및 세션 다루는 방법에 대해 알아보도록 하겠습니다.
(기회가 된다면… ^^;; )
소스코드 첨부 하였습니다~
 
재미없는 글 읽어주셔서 감사합니다^^//

'.NET > AJAX' 카테고리의 다른 글

Ajax.Net 으로 DataSet 컬렉션 제어하기  (0) 2007.07.08
AJAX 로 구현한 윈도우  (0) 2007.04.06
Ajax.Net 의 두가지 콜백 방법의 차이  (0) 2007.04.05
채팅방 베타  (0) 2007.04.05
Ajax 를 활용한 간단한 채팅 로직  (0) 2007.04.05
Posted by 땡초 POWERUMC

댓글을 달아 주세요