4.XML 기반RPC 의 웹 서비스 이용 XMLRPC 구조 와 서 비 스 는 매우 편리 하 다.기업 이 자신 에 게 제공 하 는 각종 서비스 배치 XMLRPC 서버,사용자,고객 소프트웨어 와 고객 기업 은 이런 서 비 스 를 이용 하여 고급 서 비 스 를 구축 하거나 최종 사용 자 를 대상 으로 하 는 응용 을 할 수 있다.이런 더욱 효과 적 이 고 저렴 하 며 양질 의 서 비 스 를 제공 하 는 경쟁 은 응용 서비스의 질 을 크게 향상 시 킬 것 이다.그러나 여기 에는 아직도 해결 해 야 할 문제 가 존재 한다.예 를 들 어 어떻게 목록,색인,웹 서 비 스 를 검색 합 니까?UDDI 는 이 문 제 를 해결 하려 고 했 지만 이 기준 은 간단 하지 않 았 고 업계 의 반응 도 아직 밝 혀 지지 않 았 다.그러나 기업 내부 에 XML 을 적용 한다.RPC 는 코드 의 중용 성 을 개선 할 수 있 을 뿐만 아니 라 새로운 분포 식 계산 모델 도 가 져 올 수 있 으 며 앞으로 몇 년 동안 중요 한 지식 자산 이 될 것 이다.XML_RPC 의 발전 은 분포 식 컴 퓨 팅 문 제 를 해결 하고 서비스 식 웹 이 되 는 기본 적 인 차원 에서 시작 하여 좋 은 시작 을 얻 었 고 그 후에 사람들 이 이 기준 에 대한 열정 에 따라 야 한다.그렇다면 이제 XMLRPC 의 실제 응용!4.1 PHP 에 XML 적용RPC 는 웹 서 비 스 를 제공 하 는 데 있어 서 PHP 는 매우 이상 적 인 언어 이다.우 리 는 PHP 코드 만 작성 하고 적당 한 위치 에 놓 으 면 바로 URL 을 통 해 호출 할 수 있 는 서비스 가 있 습 니 다.PHP 의 XMLRPC 의 실현 은 복잡 할 수도 있 고 간단 할 수도 있 지만 우 리 는 여러 가지 선택 을 가지 고 있다.여기 서 저희 가 선택 한 건 Useful Information Company 에서 온 XML 입 니 다.RPC 구현,코드 와 문서 에서http://xmlrpc.usefulinc.com/다운로드이 XMLRPC 구현 의 기본 클래스 는 두 파일 과 관련 됩 니 다:xmlrpc.inc:XML 포함RPC 의 php 클 라 이언 트 에 필요 한 클래스 xmlrpcs.inc:XML 포함RPC 의 php 서버 에 필요 한 클래스 4.2 클 라 이언 트 작성 XMLRPC 클 라 이언 트 는 다음 을 의미 합 니 다:1.XML 을 만 듭 니 다.RPC 요청 메시지 2.XML 설정RPC 인자 3.XML 만 들 기RPC 메시지 4.메 시 지 를 보 내 면 5.응답 을 받 습 니 다.설명 응답 은 아래 의 예 를 보십시오.<?php $f=new xmlrpcmsg('examples.getStateName',array(new xmlrpcval(14, "int"))); $c=new xmlrpc_client("/RPC2", "betty.userland.com", 80); $r=$c->send($f); $v=$r->value(); if (!$r->faultCode(){"상태 코드"를 출력 합 니 다.$HTTPPOST_VARS["stateno"]."예".$v->scalarval()."<BR>";print"<HR>이것 은 서버 의 응답<BR><PRE>".htmlentities($r->serialize())."</PRE><HR>n";}else{print"오류:";print"코드:".$r->faultCode()."원인:".$r->faultString().""<BR>";}?>이 예 에서 우 리 는 먼저"examples.getStateName"방법 을 호출 하 는 XML 을 만 들 었 습 니 다.RPC 메 시 지 는'int'값 이 14 인 정수 인 자 를 전달 합 니 다.그 다음 에 우 리 는 호출 할 URL(경로,도 메 인,포트)을 설명 하 는 고객 을 만 들 었 습 니 다.이어서 우 리 는 응답 대상 을 받 고 오 류 를 검사 하 는 메 시 지 를 보 냈 다.만약 오류 가 존재 하지 않 는 다 면,우 리 는 결 과 를 표시 할 것 이다.RPC 클 라 이언 트 프로그램 을 작성 할 때 사용 할 주요 함 수 는 다음 과 같 습 니 다.클 라 이언 트 생 성:$client=new xmlrpcclient($server_path, $server_hostname, $server_port); 메 시 지 를 보 내 는 방법 은:$response=$client->send($xmlrpcmessage); 그것 은 xmlrpcresp 의 인 스 턴 스 를 되 돌려 줍 니 다.우리 가 전달 하 는 메 시 지 는 xmlrpcmsg 의 인 스 턴 스 입 니 다.$msg=new xmlrpcmsg($methodName,$parameterArray)를 만 듭 니 다.methodName 은 호출 할 방법(프로 세 스)의 이름 입 니 다.parameterArray 는 xmlrpcval 대상 의 phop 배열 입 니 다.예 를 들 어$msg=new xmlrpcmsg("examples.getStateName",array(new xmlrpcval(23,"int")));xmlrpcval 대상 은 다음 과 같은 형식 으로 만 들 수 있 습 니 다:<?php $myVal=new xmlrpcval($stringVal); $myVal=new xmlrpcval($scalarVal, "int" | "boolean" | "string" | "double" | "dateTime.iso8601" | "base64"); $myVal=new xmlrpcval($arrayVal, "array" | "struct"); ?> 첫 번 째 형식 은 xmlrpc 문자열 값 을 만 듭 니 다.두 번 째 형식 은 설명 값 과 형식의 값 을 만 듭 니 다.세 번 째 형식 은 배열 과 같은 구조 에서 다른 xmlrpc 값 을 조합 하여 복잡 한 대상 을 만 듭 니 다.예 를 들 어<?php $myArray=new xmlrpcval(array(new xmlrpcval("Tom"), new xmlrpcval("Dick"),new xmlrpcval("Harry")), "array"); $myStruct=new xmlrpcval(array( "name" => new xmlrpcval("Tom"), "age" => new xmlrpcval(34, "int"), "geek" => new xmlrpcval(1, "boolean")),"struct"); ?> 응답 대상 은 xmlrpcresp 형식 으로 고객 대상 을 호출 하 는 send 방법 으로 얻 을 수 있 습 니 다.서버 쪽 에서 xmlrpcresp 형식의 대상 을 다음 과 같이 만 들 수 있 습 니 다.$resp=new xmlrpcresp($xmlrpcval);클 라 이언 트 에 서 는 다음 과 같은 방법 으로 응답 에서 xmlrpcval:$xmlrpcVal=$resp->value()를 가 져 옵 니 다.다음은 응답 결 과 를 설명 하 는 PHP 변 수 를 아래 와 같이 가 져 올 수 있 습 니 다.$scalarVal=$val->scalarval();복잡 한 데이터 형식 에 있어 서 두 함수 가 매우 유용 합 니 다.이 두 함 수 는 모두 xmlrpc.inc 에 있 습 니 다:$arr=xmlrpcdecode($xmlrpc_val); 이 함 수 는 xmlrpcval 변 수 를 포함 하 는 PHP 배열 을 되 돌려 줍 니 다$xmlrpcval 내의 데 이 터 는 PHP 자체 가 가지 고 있 는 변수 형식 으로 변환 되 었 습 니 다.$xmlrpc_val=xmlrpc_encode($phpval); 이 함 수 는$pval 에서 설명 한 PHP 데 이 터 를 포함 하 는 xmlrpcval 형식의 값 을 되 돌려 줍 니 다.배열 과 구조 에 대해 이 방법 은 재 귀 분석 을 할 수 있다.비 기본 데이터 형식(예 를 들 어 base-64 데이터 나 날짜-시간 데이터)에 대한 지원 이 존재 하지 않 습 니 다.4.3 서버 에서 xmlrpcs.inc 가 제공 하 는 클래스 를 이용 하여 작성 하 는 서 비 스 는 매우 간단 합 니 다.서 비 스 를 만 들 려 면 다음 과 같은 방식 으로 xmlrpc 를 만 듭 니 다.server 의 인 스 턴 스:<?php $s=new xmlrpc_server( array("examples.myFunc" => array("function" => "foo"))); ?> xmlrpc 에 전달server 구조 함 수 는 연합 배열 의 연합 배열 이다.프로 세 스"examples.my Func"에서"foo"함 수 를 호출 합 니 다.이 때문에 foo 는 방법 문형 이 라 고 합 니 다.집필 방법 은 문형 이 매우 간단 하 다.다음은 하나의 방법 문형 의 골조 이다.<?php function foo ($params) { global $xmlrpcerruser; // 사용자 오류 코드 값 을 도입 합 니 다//$params 는 xmlrpcval 대상 의 배열 if($err){/오류 조건 return new xmlrpcresp(0,$xmlrpcerruser+1,/사용자 오류 1"Error!")입 니 다.}else{//성공 반환 새로운 xmlrpcresp(새로운 xmlrpcval("좋아요!","string")); } } ?> 프로그램 이 오 류 를 검 사 했 습 니 다.오류 가 있 으 면 오 류 를 되 돌려 줍 니 다($xml rpcerruser+1 부터).그렇지 않 으 면 모든 것 이 정상 이면 작업 성공 정 보 를 설명 하 는 xmlrpcresp 를 되 돌려 줍 니 다.5.응용 사례 는 다음 과 같은 예 에서 우 리 는 서 비 스 를 구축 할 것 이다.주어진 수치 n 에 대해 서 비 스 는 n*2 로 되 돌아 갑 니 다.클 라 이언 트 는 이 서 비 스 를 이용 하여 5*2 의 값 을 계산한다.서버 측의 코드 는 다음 과 같 습 니 다:<?php include("xmlrpc.inc"); include("xmlrpcs.inc"); function foo ($params) { global $xmlrpcerruser; // 사용자 오류 코드 값 도입//$params 는 xmlrpcval 대상 의 배열$vala=$params->params[0];$sval=$vala->scalarval(); $ret=$sval*2; return new xmlrpcresp(new xmlrpcval($ret, "int")); } $s=new xmlrpc_server( array("product" => array("function" => "foo"))); ?> 클 라 이언 트 코드 는 다음 과 같 습 니 다:<?php include("xmlrpc.inc"); if ($HTTP_POST_VARS["number"]!="") { $f=new xmlrpcmsg('product',array(new xmlrpcval($HTTP_POST_VARS["number"], "int"))); $c=new xmlrpc_client("/xmlrpc/servfoo.php", "luigi.melpomenia.com.ar", 80); $c->setDebug(0); $r=$c->send($f); $v=$r->value(); if (!$r->faultCode()) { print "Number ". $HTTP_POST_VARS["number"] . " is " . $v->scalarval() . "<BR>"; print"<HR>서버 에서 온 결과!<BR><PRE>" . htmlentities($r->serialize()). "</PRE><HR>n"; } else{print"작업 실패:";print"코드:".$r->faultCode()."원인:".$r->faultString().""<BR>";}}print"<FORM METHOD="POST"><INPUT NAME="number"VALUE="${number}"><input type="submit"value="go"name="submit"></FORM><P>하나의 수 치 를 입력 합 니까?>끝 말:XMLRPC 서비스의 운영 은 분포 식 프로 세 스 의 목록 작성 과 색인 체제,예 를 들 어 프로 그래 밍 언어 에서 XML 을 처리 하 는 등 다른 많은 인 프 라 시설 과 인 프 라 작업 도 포함한다.RPC 의 더 좋 은 인터페이스 등.관련 XMLRPC 와 서비스 웹 의 보도 가 매우 많 으 니 그들의 발전 을 예의 주시 합 시다!