작성자: Dflying Chen ( http://dflying.cnblogs.com/ )
이전 시리즈의 기사에서는 모두 단일 웹 서비스를 직접 호출하지만 실제 프로젝트 개발, 특히 기존 프로젝트의 변환에서 페이지의 로직을 특화된 웹 서비스로 추출하는 데 상당한 작업이 소요되는 경우가 많습니다. Atlas는 이를 고려하여 서버측 공개 메서드에 [WebMethod] 특성을 추가하여 클라이언트측 JavaScript에서 직접 호출을 허용하도록 허용합니다.
클라이언트가 ASPX 페이지에 정의된 메서드를 직접 호출할 수 있도록 하려면 해당 메서드를 public으로 지정하고 ASPX 파일에 정의된 다음 서버 측 메서드와 같은 [WebMethod] 특성을 추가해야 합니다.
<script runat="server">
[웹방법]
공개 int AddInt(int int1, int int2)
{
int1 + int2를 반환합니다.
}
</script>
클라이언트 측에서 Atlas는 PageMethods.AddInt()를 통해 위 메서드를 호출할 수 있도록 특별한 네임스페이스 PageMethods에 존재하는 AddInt JavaScript 메서드를 매시업합니다.
동시에 ASPX 페이지에 WebMethod를 정의하면 이 메서드의 모든 페이지에 있는 서버 측 컨트롤의 값과 ViewState에 액세스할 수도 있으며 전체 페이지의 수명 주기는 다음과 같습니다. Page_Load와 같은 기존 ASP.NET 페이지 PostBack 다른 모든 메서드가 호출되므로 페이지에 더 강력하게 액세스할 수 있습니다. 그러나 이는 웹 메서드가 호출될 때마다 페이지의 ViewState 및 제어 값이 서버로 다시 전달되고 전체 페이지 수명 주기에 대한 서버 측 처리가 이루어지기 때문에 성능 저하도 가져옵니다. 순수 ASMX에 정의된 웹 메소드를 처리하는 것보다 시간이 더 걸립니다. 훨씬 더 복잡합니다. 그래서 여기서는 최대한 순수 웹 서비스를 사용하는 것을 권장합니다. Atlas 서버 측 구현에서는 페이지 메서드 대신 웹 서비스를 사용하는 것이 좋습니다.
예를 살펴보겠습니다. 먼저 ASPX에서 WebMethod를 정의해 보겠습니다. 두 숫자의 합을 찾을 뿐만 아니라 페이지의 서버측 TextBox 값에도 액세스하는 것을 볼 수 있습니다
. ">
[웹방법]
공개 문자열 AddInt(int int1, int int2)
{
return (int1 + int2).ToString() + string.Format("rn그리고 서버 TextBox의 텍스트는 '{0}'입니다.", tbServer.Text);
}
</script>
그러면 페이지의 ScriptManager가 있습니다. 여기에 참조를 추가할 필요가 없습니다. <atlas:ScriptManager ID="scriptManager" runat="server" />
그런 다음 가수를 입력하는 데 사용되는 두 개의 입력과 서버 호출을 트리거하는 데 사용되는 입력이 있습니다.
<input id="value1" type="text" value="1" />
<input id="value2" type="text" value="2" />
<input id="btnAdd" type="button" value="추가!" onclick="return btnAdd_onclick()" />
서버측 TextBox도 있습니다:
<asp:TextBox ID="tbServer" runat="server" Text="Server control"></asp:TextBox>
마지막은 JavaScript 호출입니다. PageMethods의 내장 네임스페이스에 주의하세요.
function btnAdd_onclick() {
PageMethods.AddInt(
$('값1').값,
$('value2').값,
완료 시
);
}
functionOnComplete(결과)
{
경고(결과);
}
브라우저에서 실행하고 두 개의 가수를 입력한 다음 서버측 TextBox에 일부 문자를 입력하고 추가를 클릭하면 서버측 TextBox 값에 액세스된 것을 볼 수 있습니다.
이는 Fiddler가 가로채는 네트워크 전송입니다. ViewState와 TextBox가 모두 서버로 다시 전달되는 것을 볼 수 있습니다.
이 예제 프로그램의 소스 코드는 여기에서 다운로드할 수 있습니다.