javascript를 사용하여 .net에서 웹 서비스를 호출하는 경우 웹 서비스 동작을 사용해야 합니다. 다음은 설명하기 위한 예시이며 비교적 간단합니다
. 1. 먼저<%@ WebService Language="C#" class=MyMath %>
와 같은 웹 서비스를 생성합니다
.
시스템 사용;
System.Web.Services 사용;
공개 클래스 MyMath {
[웹방법]
공개 int 추가(int a, int b)
{
a + b를 반환합니다.
}
[웹방법]
공개 int 빼기(int a, int b)
{
a - b를 반환합니다.
}
}
그런 다음 게시하고 먼저 wsdl을 가져옵니다.
2. 먼저 webbehavior.htc 파일을 다운로드해야 합니다( http://msdn.microsoft.com/downloads/samples/internet/behaviors/library/webservice/default.asp 로 이동 가능).
다운로드하여 웹의 현재 디렉터리에 넣은 후 webserice를 호출하려는 페이지에서 다음과 같이 수정합니다.
<본문>
<div id="addservice" style="behavior:url(webservice.htc)"></div>
</body>
여기서는 div ID에 의미 있는 이름을 지정하고 스타일을 웹 서비스 동작으로 지정합니다. 다음으로 webserice를 호출하기 위해 자바스크립트를 작성해야 합니다.
먼저, 자바스크립트에서 wsdladdservice.useService(" http://localhost/services/math.asmx?WSDL", "MyMath ")를 호출합니다.
id.useService(WSDLL 경로, 간단한 이름 지정 방법)를 사용하십시오.
앞서 설정한 id는 addservice였으며, 클라이언트가 이를 더 쉽게 호출할 수 있도록 MyMath라는 이름을 붙였습니다. webserice가 올바르게 호출될 수 있도록 하려면 다음과 같이 webservice 호출을 처리하는 javascript를 body의 onload 이벤트에 즉시 로드해야 합니다.
<스크립트 언어="자바스크립트">
함수 초기화()
{
addservice.useService(" http://localhost/services/math.asmx?WSDL","MyMath ") }
</script>
<body onload="init()">
<div id="service" style="behavior:url(webservice.htc)">
</div>
</body>
위의 경우 웹 서비스 동작을 통해 먼저 웹 서비스를 반환하는 wsdl을 가져옵니다. 다음으로 호출 형식은 다음과 같습니다. iCallID = id.FriendlyName.callService([CallbackHandler,] "MethodName" , 매개변수1, 매개변수2, ..);
여기서 id는 div에 설정한 ID이고 FridndbyName은 방금 이름을 지정한 애스펙트 이름입니다. 여기서는 MyMath이고 CallbackHandler는 콜백 함수의 프로세스 이름입니다. 설정이 없으면 기본값은 onresult를 사용하는 것입니다. 이 메서드는 아래에서 설명할 처리에 사용되며 param1, param2 등은 다음과 같은 수신 매개변수를 참조합니다.
<SCRIPT 언어="자바스크립트">
// 이 변수는 모두 전역 변수여야 합니다.
// init()와 onresult() 모두에서 사용되기 때문입니다.
var iCallID = 0;
바린트A = 5;
var intB = 6;
함수 초기화()
{
// WebServiceURL에 대해 친숙한 이름 "MyMath"를 설정합니다.
service.useService("/services/math.asmx?WSDL","MyMath");
// 다음 메소드는 콜백 핸들러를 지정하지 않으므로 onWSresult()가 사용됩니다.
iCallID = service.MyMath.callService("add", intA, intB);
}
onWSresult() 함수
{
// 오류가 있고 호출이 init()의 call()에서 온 경우
if((event.result.error)&&(iCallID==event.result.id))
{
// event.result.errorDetail 속성에서 오류 정보를 가져옵니다.
var xfaultcode = event.result.errorDetail.code;
var xfaultstring = event.result.errorDetail.string;
var xfaultsoap = event.result.errorDetail.raw;
// 여기에 특정 오류 코드를 처리하는 코드를 추가합니다.
}
// 오류가 없고 호출이 init()의 call()에서 온 경우
else if((!event.result.error) && (iCallID == event.result.id))
{
// 연산을 보여주세요!
Alert(intA + ' + ' + intB + ' = ' + event.result.value);
}
또 다른
{
Alert("뭔가 다른 이벤트가 발생했습니다!");
}
}
</SCRIPT>
<body onload="init()">
<div id="service" style="behavior:url(webservice.htc)" onresult="onWSresult()">
</div>
</body>
참고로 onresult 메소드를 사용하여 반환하는 경우 div 부분의 onresult에 처리 방법을 지정해야 하며, 여기서는 반환된 정보를 사용하여 오류가 있는지 확인하는 데 사용됩니다. 오류가 발생하면 표시됩니다.
콜백을 사용하는 경우 다음과 같이 진행하십시오.
<SCRIPT 언어="자바스크립트">
// 이 변수는 모두 전역 변수여야 합니다.
// init()와 onResult() 모두에서 사용되기 때문입니다.
var iCallID = 0;
바린트A = 5;
var intB = 6;
함수 초기화()
{
// WebServiceURL에 대해 친숙한 이름 "MyMath"를 설정합니다.
service.useService("/services/math.asmx?WSDL","MyMath");
// 다음은 "mathResults"라는 콜백 핸들러를 사용합니다.
iCallID = service.MyMath.callService(mathResults, "add", intA, intB);
}
함수 mathResults(결과)
{
// 오류가 있고 호출이 init()의 call()에서 온 경우
if(결과.오류)
{
// event.result.errorDetail 속성에서 오류 정보를 가져옵니다.
var xfaultcode = result.errorDetail.code;
var xfaultstring = result.errorDetail.string;
var xfaultsoap = result.errorDetail.raw;
// 여기에 특정 오류 코드를 처리하는 코드를 추가합니다.
}
//오류가 없었다면
또 다른
{
// 연산 표시
Alert(intA + ' + ' + intB + " = " + 결과.값);
}
}
</SCRIPT>
<body onload="init()">
<div id="service" style="behavior:url(webservice.htc)">
</div>
</body>