Language/ASP | Posted by 아키텍처 2012. 4. 24. 15:11

ASP XRS사용

 
 

ASP 페이지를 객체로 참조하기
----------------------------

XRS로 ASP의 메소드를 호출하는 방법을 간편하게 
하기 위해서, 메소드를 갖고 있는 서버 페이지를 레퍼런싱할 
수 있다. 이 방법은 object.method()와 같은 일반적인 방법으로 
서버의 메소드를 호출할 수 있도록 해준다.

- ASP페이지를 객체로

클라이언트 스크립트에서 XRSGetASPObject 메소드에 URL이나 ASP 
페이지 이름을 념겨서 호출한다.
ASPobj = XRSGetASPObject(url)

ASPobj : XRSGetASPObject에 의해 생성된 객체이다. 
url : 호출할 메소드가 있는 페이지의 URL
앞에서 만든 보기 파일의 이름이 XRSMath.asp 이고,
JavaScript라면,

xrsMath = XRSGetASPObject("../myPages/XRSMath.asp")

VBScript라면,

set xrsMath = XRSGetASPObject("../myPages/XRSMath.asp")

함수의 호출은 아래와 같다.
JavaScript,

co = xrsMath.Add(number1, number2)

VBScript,

set co = xrsMath.Add(number1, number2)


XRS 메소드 만들기
-----------------------------


- 동기적으로 동작하기

위의 모든 과정을 마치고, 메소드를 호출하면 기본적으로 
동기적으로 동작한다. 따라서, 클라이언트 스크립트는 메소드가 
완전히 종료될 때까지 정지하게 된다. 대개의 경우는 이러한 
동기적인 호출이 적용된다.
서버의 메소드를 호출했을 때, 그 메소드는 값 하나만을 반환하지 
않는다. 대신에 호출객체를 생성하고 그 객체는 반환되는 값과 
호출된 메소드의 상태정보를 포함한다. 가장 흔히 사용되는 
속성은 호출객체의 return_value 이다. 이것은 리모트 프로시저에 
의해 생성된 하나의 값을 갖고 있다. 다른 호출객체의 속성은 
리모트 프로시저 호출에 대한 상태정보를 담고 있다.
만일 ASP에 대한 객체 레퍼런스를 생성했다면, object.method 의 
문법을 메소드 호출에 사용할 수 있다. 선택적으로, 객체에 
레퍼런스 없이도 리모트 프로시저를 호출할 수도 있다. 이렇게 
하는 것은 object.method를 사용하는 것보다 글자수가 조금 많다. 
하지만, 객체의 레퍼런스를 생성하는 것을 필요로 하지 않는다.

- 페이지에 대한 참조를 통한 호출

페이지에 대한 참조를 만들었을 경우에는 아래와 같이 
호출할 수 있다.
JavaScript,

callObject = ASPObject.methodName(p1, p2[,...])

VBScript,

set callObject = ASPObject.methodName(p1, p2[,...])

- 참조없이 호출하기

참조가 없을 때에는, XRSExecute 함수를 이용해서 아래와 
같이 호출한다.
JavaScript,

callobject = XRSExecute(url, methodName, p1, p2[,...])

VBScript,

set callobject = XRSExecute(url, methodName, p1, p2[,...])

callObject : 리모트 스크립팅 호출이 끝날 때, 생성되는 
호출객체를 담을 변수 이름이다. 이 객체는 호출이 끝나면서 
자동으로 생성되는 객체이기 때문에 개발자가 사전에 작업할 것은 없다.
ASPObject : XRSGetASPObject 메소드를 사용하여 이전에 생성한 
페이지에 대한 레퍼런스를 갖고 있는 변수이다.
url : 실행시킬 메소드가 있는 ASP 페이지의 URL이다. 당연한 
이야기 이지만, 위에서 언급한 XRS 서버 페이지가 
될 수 있는 코딩을 해둬야한다. 
methodName : 실행시킬 서버의 메소드의 이름
p1, p2, ... : methodName 의 매개 변수이며, 값에 의한 
전달(call by value)로 전달된다. 숫자나 문자와 같은 간단한 데이터 
타입만 전달가능하며, 구조체는 전달할 수가 없다. 
참고로, 클라이언트에서 서버로 데이터가 전달될 때, 스트링으로 
컨버팅된다. 따라서, 서버 메소드에선 CInt, CLng와 같은 함수로 
적절하게 컨버팅해서 사용해야한다.
아래는 Add 함수를 사용하는 보기이다. 호출후 co라는 호출객체를 
반환받는다. 그리고, co의 return_value에 원하는 결과가 들어있다.


xrsMath = XRSGetASPObject("../myPages/XRSMath.asp")
number1 = txt1.value;
number2 = txt2.value;
co = xrsMath.Add(number1,number2);
txt3.value = "The sum is " + co.return_value;


XRSExecute를 사용하는 똑같은 코드이다.


number1 = txt1.value;
number2 = txt2.value;
co = XRSExecute("../myPages/XRSmath.asp","add",number1,number2);
txt3.value = "The sum is " + co.return_value;



- 비동기로 동작하기

XRS는 비동기로 메소드를 호출할 수 있는 방법을 
제공한다. 비동기적으로 메소드를 호출하면 클라이언트 스크립트는 
다른 일을 계속 진행할 수가 있다. 이런 호출은 사용자에게 
지체되는 현상을 덜 보여주게 된다.
비동기 호출은 동기 호출과 비슷하며, 단지 추가적인 매개변수 
세개를 설정해주면 된다.
JavaScript 콜백 함수는 비동기 메소드가 다 끝난 다음에 
호출된다. 보기를 들면, 비동기 메소드가 DB로부터 룩업(lookup)값을 
가져오면, 콜백함수는 그 데이터를 화면에 출력하게 된다.
필수가 아닌 에러 콜백 함수는 메소드가 에러를 발생했을 때 
호출되는 함수이다.
또 다른, 컨텍스트 매개변수는 후에 다시 되돌려지는 값이다. 
이것은 어떤 메소드에 의해 콜백 함수가 호출된 것인지 판단하기 
위함이다. 따라서, 모든 메소드를 하나의 콜백 함수로 처리할 수 도 있다.
동기 호출처럼, 비동기 호출도 반환값과 호출된 프로시저의 상태를 
담고 있는 호출객체를 생성한다. 비동기 호출에선 콜백함수에 그 
값이 매개변수로 전달된다.
페이지에 대한 참조를 통한 호출
JavaScript, 

callObject = ASPObject.methodName(p1, p2[,...],
callbackFunction, errorCallbackFunction, context);


xrsMath = XRSGetASPObject("../myPages/XRSMath.asp")
number1 = txt1.value;
context = "squaring";
co = xrsmath.square(number1,showResults,context);


- 참조없이 호출하기

JavaScript,

callobject = XRSExecute(url, methodName, p1, p2[,...], 
callbackFunction, errorCallbackFunction, context);


number1 = txt1.value;
context = "squaring";
co = XRSExecute("./myPages/XRSmath.asp","square",number1,showResults, showErrors, 
context);


callbackFunction : 콜백함수에 대한 포인터이다. 따라서, 함수 
이름을 그냥 적으면 되지, 절대로 따옴표로 묶어선 안된다.
errorCallbackFunction : 에러시 호출되는 콜백함수의 포인터
context : 이 값은 콜백함수에 그대로 다시 전달된다.
아래의 showResults는 위의 보기의 콜백 함수이다.


function showResults(co){
       typeOp = co.context;
       rValue = co.return_value;
       txt2.value = "Result of " + typeOp + " operation = " + rValue;
}


위의 경우엔, showResult는 모든 연산의 결과를 출력하기 위한 
일반적인 목적의 콜백함수로 사용되었다. 
다음의 함수는 에러 처리용 콜백함수다.

function showErrors(co){
// Dump raw data
msg = "The raw data returned by the remote method call is "
msg = msg + co.data
alert(msg);
// Display friendlier information
msg = "The following error occurred during the " 
msg = msg + co.context
msg = msg + " XRS call:\n"
msg = msg + co.message
alert(msg);
}


- 비동기 호출 테스트 하기

호출객체의 status 값을 찹조하여, 호출한 메소드가 완료되기 전에 
메소드의 상태를 확인할 수가 있다.
아래의 보기는 square 메소드를 비동기적으로 호출하고 그 상태를 
바로 대화상자를 통해서 보여준다.


number1 = txt1.value;
context = "squaring";
co = XRSExecute("./myPages/XRSmath.asp","square",number1);
if (co.status == -1)
       {txt2.value = "Call failed";}
else 
       {txt2.value = "Call succeeded, return value = " + co.return_value;} }


- 비동기 호출의 제어

동기 호출로의 전환

호출이 끝날때까지 기다리는 경우, 동기 호출과 다를바가 없다. 
이럴때는 호출객체의 wait() 메소드를 호출한다.

취소

호출객체의 cancel()을 호출한다.


 

예전 한 3~5년(?) 전쯤에 어디에선가 이글을 카피했는데, 출처가 기억이 안나네요.. ^^;;;

아시는분있음 알려주세요.

바로 수정하겠습니다. (--)(__)(--)

'Language > ASP' 카테고리의 다른 글

ASP에서 XML파일 읽기  (0) 2012.04.24
에러처리 On Error Resume Next 와 On Error Goto 레이블명  (0) 2012.04.24
Include 와 Server.Execute 의 차이점  (0) 2012.04.24
Err.Num  (0) 2012.04.24
RND() 랜덤함수  (0) 2012.04.24
Posted by 김준홍 (http://www.Juuun.com)