관리 메뉴


Kinesis´s Open Document

ASP.NET C# - IIS7.x 에서 AjaxPro (Ajax.NET Professional) 사용하기 본문

MEMO/기술 자료/C# Language

ASP.NET C# - IIS7.x 에서 AjaxPro (Ajax.NET Professional) 사용하기

Kinesis 2012. 2. 24. 16:44


웹 프로그래밍을 하다보니 AjaxPro (Ajax.NET Professional)를 이용해야 할 일이 생겼다.

Ajax.NET Professional 의 공식홈페이지에 들어가 7.x 버젼대를 다운받아 압축을 풀어보면 다음과 같이 총 5개의 파일이 나온다.

AjaxPro2.dll
AjaxPro.dll
AjaxPro.JSON.2.dll
AjaxPro.JSON.dll
web.config

이 파일들 에서 자신이 사용할 1개의 dll 만을 웹서비스 폴더의 Bin 폴더에 넣어주면 되는데, 전부다 넣을 경우 dll이 내부의 함수들의 충돌에 의해 정상작동이 이루어지지 않아 문제를 발생시킨다. 또한 파일명 내에 2 가 적힌 것은 .Net Framework 2.0 의 환경에서 사용하는 목적으로 만들어진 dll 이고 2가 붙지 않은 것은 .Net Framework 1.1 버젼의 환경에서 사용하는 dll로서 나는 AjaxPro2.dll을 Bin 폴더에 집어 넣었다.

그리곤 Web.config 에 AjaxPro.dll 을 이용하기 위한 httpHandlers를 등록을 했는데 왠걸 HTTP 오류 500.23 - Internal Server Error 이 떠버린다.

이런 경우 해결하는 방법이 2가지가 있다.


첫번째 방법으로는 IIS 응용 프로그램 풀에서 관리되는 파이프라인 모드를 클래식으로 두는 방법이다.
이렇게 하면 AjaxPro를 이용할 수 있는 환경이 구성된다. 하지만 사실상 클래식 모드로 전환 할 경우 일부 기능이 제한으로 인한 예외 발생등이 생기게 되므로 사실상 별로 추천할 것은 되지 않는 듯 했다.

두번째 방법으로는 마이그레이션을 이용하는 것이다.
명령 프롬프트 상에서 appcmd 를 통해 마이그레이션을 하면 되는데,

%SystemRoot%\system32\inetsrv\appcmd migrate config "[응용 프로그램 풀 이름]/"
예) %SystemRoot%\system32\inetsrv\appcmd migrate config "Kinetic.NET/"

명령어를 통해서 마이그레이션을 하면 해결이 되며 AjaxNET Professional (AjaxPro.NET) 을 사용할 환경 준비가 끝이 나게 된다.

그 외에 Ajax.NET Professional (AjaxPro.NET) 을 이용하면서 주의해야할 점이 몇가지 있는데.
내가 시행착오법을 통해 확인한 사실은 다음과 같다.

<head></head> 태그에는 runat="server" 속성이 들어가 있어야 한다.
 예) "<head runat="server">…헤더 구성요소…</head>"

<body></body> 태그 안에는 <from id="form_id" runat="server"></form>이 존재해야 한다.
 예) "<body><form id="form1" runat="server"></form></body>"

함수 사용시 Class 명과 Inherits 가 동일해야 하고 클래스명을 지정해 주어야 한다.
 예) "Sample.FunctionA();" 등

AjaxMethod 로 지정된 함수 내에서는 HttpContext.Current.Response.Write() 함수를 사용할 경우 에러가 발생한다.

일정 시간 간격을 기준으로 오류가 발생할 경우 콜백함수를 지정하여 처리하면 문제가 해결된다.

이러한 부분만을 잘 지키면, Ajax.NET Professional (AjaxPro.NET) 의 이용에 있어 큰 문제는 발생하지 않을 것이다.

아래는 CS 에서 사용하는 예제 셈플

using System;using System.Web;using AjaxPro;public partial class _Default : System.Web.UI.Page{    protected void Page_Load(object sender, EventArgs e)    {        AjaxPro.Utility.RegisterTypeForAjax(typeof(_Default));    }     [AjaxPro.AjaxMethod(AjaxPro.HttpSessionStateRequirement.ReadWrite)]    public string Test()    {        return HttpContext.Current.Request.UserAgent;    }}


Comments