SOAP 와 XMLHTTP를 사용한 응용프로그램 사용하기
Creating Application using SOAP and XMLHTTP Part Iwritten by Craig Murphytranslated by asptomorrow
SOAP와 XMLHTTP를 이용한 응용프로그램 생성 인터넷이든 인트라넷이든, 어플리케이션간의 통신은 언제나 개발자들을 한밤 중에 깨어있게 한다. 많은 솔루션들은 통합성이 그다지 좋지않은 플랫폼 의존적인 경향이 있고, 자주 클라이언트에서 서버로 Round-Trip 요청이 발생한다. DCOM, CORBA 기타 등등과 같은 다른 솔루션들은 방화벽때문에 커뮤니케이션의 문제를 가 발생된다. the Simple Object Access(SOAP) 는 이런 많은 문제를 완화시킨다. 앞으로 다룰 세가지 강좌를 통해서 우리는 SOAP(version 1.1)을 살펴볼 것이고, 어떻게 응용 프로그램간에 커뮤니케이션 솔루션의 일부로서 자바 스크립트를 사용할 수 있는 지 보여줄 것이다. 완벽한 SOAP 규격서는 마이크로소프트 사이트에서 구할 수 있다: http://msdn.microsoft.com/workshop/XML/general/soapspec.asp SOAP를 보여주기 위해, 필자는 IE5와 MSXML Parser(MSXML.dll)을 사용할 것이다. 특히, 필자는 서버 기반의 응용프로그램에 웹페이지에서 메소드를 수행하는 Remote Client 를 보여줄 것이다. 전체 예제는 이 마지막 기사에서 다운로드가 가능하다. 우리는 또한 원격 응용프로그램과 HTTP를 사용한 서버 사이에 데이터를 전송하는 방법을 보여줄 것이다. 클라이언트와 서버가 같은 머신에 있거나, 인트라넷, 인터넷이든 상관이 없다. Microsoft 파서는 여기서 찾을 수 있다 : http://msdn.microsoft.com/downloads/webtechnology/xml/msxml.asp 그러나 우리는 IE5를 사용하도록 권하지는 않는다. 우리는 똑같이 웹서버(인트라넷 이든 인터넷이든)로 통신하는 SOAP를 사용하는 단독 exe를 쓸 수 있다.(여러분이 좋아하는 프로그래밍 언어/Tool을 사용하여) 이 기사들의 코스에서, SOAP : 인력 관리 시스템의 사용과 같은 모델을 사용한 예제 응용프로그램 시범을 보일 것이다. 그 시스템의 작업들은 거의 사소한 것일 것이 지만, 그것들은 다음과 같은 개념을 보여준다. : # (Access) 데이터베이스로부터 XML 데이터 추출 # 몇가지 현상에 기초한 데이터베이스 쿼리 하기 위한 SOAP 사용 # SOAP 응답(XML)을 각각 자바스크립트의 오브젝트로 해석하기 하나의 기사로 하기에는 많아서 Part II는 다음과 같은 내용을 다룬다. # 서버로 업데이트 된것을 자바스크립트 오브젝트로 해석하여 되돌려 보내는 SOAP를 사용할 수 있다. # SOAP가 에러와 문제를 어떻게 나타낼 것인가?(이런것들은 fault라고 알려져 있다) # 서버사이드 COM-component에서 메소드를 실행하는 SOAP의 이용 마이크로소프트 퍼스널 웹서버(PWS)로 보여주려는 코드(이 기사의 제일 아래에서 다운로드 가 가능하다) 작동이 충분하지만, 이상적으로, SOAP 응용프로그램을 위해서 운영환경급의 웹서버를 사용할것이다. SOAP란 무엇인가? SOAP는 마이크로소프트, Developmentor, IBM, LOTUS Development Corp, Userland Software Inc. 등의 집합적인 작업이다. 최근에 Sun mirosystem도 참여했다. 이 인상적인 Line-up은 이전에 적이었던 사람들이 SOAP규격에 협력하여 모이게 되었다. SOAP는 "잠재적으로(potential)" 분산응용환경 사이에 데이타와 메소드를 호출하는 운송수단으로 일관적이고, 구조적인 수단을 제공한다. 필자가 잠재적이라고 말한것은, 로컬 인트라넷에서 SOAP를 완벽하게 사용할 가능성이 있기 때문이다. 우리는 PWS를 사용하여도 SOAP를 사용할 수 있다. 비록 필자는 PWS에 의존하는 운영환경을 생성하도록 추천하지는 않지만 말이다. SOAP는 텍스트 기반의 프로토콜이다. 그래서, 어떠한 플랫폼 의존에 영향을 끼치지 않는다. 리눅스 응용프로그램을 클라이언트로 사용하고, IIs하에서 작동되는 프로세스는 서버 에 있어도 완벽하게 작동이 가능하다. 마찬가지로, 서버가 어떻게 클라이언트의 요청사항을 다루는지는 중요하지 않다. 서버는 로컬 응용프로그램, COM 오브젝트, ASP에 내장된 Vbscript, Javascript를 고를 수 있다. 플랫폼 독립성은 메세지 포맷으로 eXtensible Markup Language(XML)의 사용으로 좀더 향상될 수 있다. XML권고안은 World Wide Web Consortium(W3C) Web Site에서 찾을 수 있다 : http://www.w3.org/TR/1998/REC-xml-19980210 SOAP Message 구조 우리는 이미 SOAP Message는 XML을 이용하여 encode되어있다는 것을 알고 있다. 그러나, SOAP 규격은 추상화의 다른 계층(Layer)을 나타낸다. 클라이언트 응용프로그램(아마도 웹 브라우져일것이다)으로부터 파생된 SOAP 메시지는 SOAP Requests 로 알려져 있다. 서버가 접수를 받고 요청을 처리한 후에, SOAP Response는 클라이언트로 반환된다. 이 프로세스는 아래의 그림과 같이 나타난다. XML-speak에서 SOAP 메시지는 Envelope라고 불리우는 Root 요소를 이루고 있다. 이것은 필수사항이다. 옵션으로, 루트 노드에서 우리는 Header 요소를 가질 수 있다. 또한 루트 노드의 안쪽에서, Body 요소는 필수이다. 전형적으로, 이런 요소들 각각은 XML namespace로 첮머리에 놓이게 된다. SOAP 규격은 우리에게 이런 namespace identifier를 사용하고(http://schemes.xmlsoap.org/soap/envelope), SOAP-ENV의 앞에 놓일수 있도록 해준다. Namespace(그리고 그 접두사들은)는 우리에게 즉시 SOAP 메시지 즉, 우리가 프로토콜 요구(Requirement)과 메소드와 데이터 컨텐트와 같은 것들에서 SOAP 요소들을 즉시 구별할 수 있도록 해줄만큼 유용하다. 서버로부터 클라이언트까지, 그리고 반대경우 클라이언트와 서버의 커뮤니케이션은 Hypertext Transfer Protocol(HTTP) 을 통해서 이루어진다. 이론적으로, 다른 전송 메커니즘 예를들어 socket이나 메세지 큐, e-mail 과 같은 것으로 사용될 가능성도 있다. 위의 그림은 전용적인 메세지의 흐름을 그린것이다. 서버는 Listening 장치로서 역할을 한다. 그것은 SOAP의 요청을 찾고 있다. 여기서는 한개의 서버만 있지만, Listening 서버는 실행을 위해서 다른 서버로 클라이언트의 요청을 진행시키게 할 확실한 가능성이 있다. 이 모델이 작동한다면, 클라이언트와 서버 모두 어떻게 XML을 분석해야하는지 알아야 하는것을 언급하는 것은 중요한 일이다. Listening 서버가 단지 서버가 에서 보낸것을 클라이언트로 보내주기만 한다면 XML을 어떻게 분석해야 하는지 알아야 할 필요는 없다. 예제 응용프로그램 이 내용을 설명하기 위해서, 필자는 고용정보를 운영하는 SOAP의 사용을 보여줄 작은 응용프로그램을 만들었다. 예제 응용프로그램은 피고용인 선택 폼으로 이루어져 있다: 피고용인의 이름이 선택될때, SOAP 요청은 서버에 보내지게 된다. 서버에게 "번호가 123인 피고용인에 대한 모든 상세내용을 보내주십시요" 라고 물어보게 된다. 서버가 그 요청에 응답할 수 있다고 가정하면, 서버는 선택된 피고용인의 상세내용에 대해서 응답을 할 것이다. 이 시점에 다음과 같은 컨트롤이 상주된다: HTML 컨트롤은 아래와 같이 생성된다. <input type="text" name="emp_no" size="8" disabled="true"><input type="text" name="last_name" size="24"><input type="text" name="first_name" size="24">이하 생략~ 이것은 우리에게 할당된 값들을 HTML 컨트롤에게 다음과 같이 참조하도록 한다 : emp_no.value="5"; 실제 예제 : SOAP 요청 여기에 예제 SOAP 요청이 있다: <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope"> <SOAP-ENV:Body> <m:getEmployeeDetail xmlns:m="http://www.craigmurphy.com/hrweb"> <emp_no>5</emp_no></m:getEmployeeDetail> </SOAP-ENV:Body> </SOAP-ENV:Envelope> 만일 우리가 메세지를 남기면서, 이 SOAP 요청을 없앤다면, 남은것은 다음과 같다: <m:getEmployeeDetail xmlns:m="http://www.craigmurphy.com/hrweb"><emp_no>5</emp_no></m:getEmployeeDetail> 두개의 남아있는 요소들은 메소드 이름(getEmployeeDetail)과 메소드와 함께 가는 일부 데이터 (emp_no value 5)로 이루어져 있다. 필자는 또다른 namespace와 메소드 호출의 의미를 유일하게 구별해주는 접두사, 즉 getEmployeeDetail과 같은 메소드를 사용하고, 요소 emp_no는 http://www.craigmurphy.com/hrweb을 통해서 제공되는 의미론(semantics)을 사용하여 실행되도록 한다. 이 시점에서 namespace는 유효한 웹 주소를 필요로 하지 않는다는 것을 언급할 가치가 있다. 즉, 그것은 해결이 되지 않을수도 있고, 접근하지 못할 수도 있기 때문이다. namespace는 context는 제공하는데 사용된다. 필자는 필자 자신의 도메인을 사용했는데 그 이유는 필자가 유일함을 보장받는다는 것을 알기 때문이다. 메소드에서 namespace의 추가는 같은 이름을 가진 두개이상의 메소드가 SOAP body에 포함되는것을 허용한다. 이것은 완벽히 실현가능할 상황인가? 우리는 두개의 getEmployeeDetail 메소드를 호출하고 싶어한다면, 아마도 두개의 다른 기구(organization)에서 호출해야 할 것이다. SOAP Request 전송하기 이 요청폼을 클라이언트에서 서버로 전송하는것은 마이크로소프트 XMLHTTPRequest 오브젝트를 사용하여 이루어질 수 있다. 다음 Javascript는 아래와 같이 이루어진다. var httpObj = new ActiveXObject("Microsoft.XMLHTTP"); var sSOAPRequest = ""; var sSOAPAction = "http://localhost/asptoday/hrweb#getEmployeeDetail"; httpObj.Open("POST","http://localhost/asptoday/SOAPListener.asp",false,"", ""); httpObj.setRequestHeader("SOAPAction", sSOAPAction); httpObj.setRequestHeader("Content-Type","text/xml"); // Build sSOAPRequest... httpObj.Send(sSOAPRequest); 단순함과 가독성을 위해서 필자는 sSOAPRequest의 작성을 빠트렸다. 위의 예제는 단지 SOAP Request를 포함하는 문장을 보여준것이다. 여러분 다음에서 보듯이, sSOAPAct 변수는 SOAP Listener에게 SOAP Request의 목적에 대해서 몇가지 아이디어를 제공하기 위해 사용된다. 이 경우는 hrweb#getEmployDetail은 요청의 "의도"로 간주되어진다. (이것은 여러분이 여러분의 asptoday 디렉토리하에서 hrweb 디렉토리를 필요로 한다는 것을 의미한다!) 이 부분은 SOAP 요청(getEmployDetail 메소드를 구별하는것)을 script SOAPListener.asp 로 전송하는것까지이다. SOAP 단말기에서, SOAPListener.asp는 마지막점(endpoint)로 알려져 있다. 메서더는 endpoint에 대해서 실행된다(혹은 호출된다). 필자는 이 기사 마지막 부분에서 httpObj.setRequestHeader()의 사용을 설명하겠다. 사용예제 : SOAP 응답 다음 SOAP 요청을 통해서, 서버는 다음과 같이 응답할 것이다. <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope"> <SOAP-ENV:Body> <m:getEmployeeDetailResponse xmlns:m="http://www.craigmurphy.com/hrweb"> <employee emp_no="5"> <last_name>Butcher</last_name> <first_name>Frank</first_name> <base_office>Walford</base_office> <car_reg>EAST 1</car_reg> <car_model>XJS</car_model> <car_maker>Jaguar</car_maker> </employee> </m:getEmployeeDetailResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> SOAP 요소를 없애면 다음과 같이 남는다: <m:getEmployeeDetailResponse xmlns:m="http://www.craigmurphy.com/hrweb"> <employee emp_no="5"> <last_name>Butcher</last_name> <first_name>Frank</first_name> <base_office>Walford</base_office> <car_reg>EAST 1</car_reg> <car_model>XJS</car_model> <car_maker>Jaguar</car_maker> </employee> </m:getEmployeeDetailResponse> 성공적인 SOAP 응답은 Respose의 앞에 고정된, 원래의 메서드 이름의 요소안에 응답 데이터 를 포함한다. 여러분이 받은 SOAP 응답은 방금만든 SOAP Request와 합쳐진다는 것은 체크할 만한 가치가 있다. 여러분이 여러개의 비동기(넌 블러킹) 요청을 여러 서버에 보냈다면, 그것을 보낸 같은 순서대로 응답을 받지는 못할 것이다. 비슷하게, 여러분은 그 응답이 여러분이 원래의 지정된 요청의 namespace에 속해있다는 것을 확인시켜주기 위해 체크를 해야한다. 여러분은 여러개의 getEmployeeDetail 메서드를 가지고 있다는 것을 기억해야한다. 어떻게 서버가 메서드를 구별하는 몇가지 프로세싱을 필요로 하는 응답을 생성해 낼까. 메서드가 구별되는 순간, 실행되어야 하고, 응답은 클라이언트로 되돌려 진다. 요청된 메서드를 구별하는 것은 아래의 자바스크립트를 이용하여 다루어진다 : var SOAPEnvelope = Server.CreateObject("Microsoft.XMLDOM"); // Load the SOAP envelope SOAPEnvelope.async = false; SOAPEnvelope.load (Request); var oBody = SOAPEnvelope.selectSingleNode("//SOAP-ENV:Body"); var oMethod = oBody.firstChild; var sMethod = oMethod.baseName; SOAP 메시지는 Request 오브젝트 내부에서 서버에 도착된다. 마이크로소프트 XML 분석기(parser) 는 우리에게 Microsoft.XMLDOM 의 인스턴스로 직접 Request 오브젝트를 로드하도록 하게 한다. XMLDOM의 사용하여 우리는 selectSingleNode 메서드를 SOAP 바디를 추출하는 메서드로 호출 할 수 있고, 거기서 우리는 첫번째 차일드 노드를 볼 수 있다. 그리고 그 노드는 필요로 하는 첫번째 메서드가 될 것임을 우리는 알고 있다. baseName의 사용은 단순히 namespace 접두사를 찾아내는 것이다. 우리가 메서드를 실행하도록 사용될 자바스크립트는 다음과 같은 형태를 가질 것이다: switch (sMethod) { case "getEmployeeDetail": // get the details default: // handle unknown methods? } HTTP 응답 헤더(Headers) 위에있는 클라이언트-사이드 예제에서, 여러분은 아마도 다음과 같은 코드를 주목했을것이다. httpObj.setRequestHeader("SOAPAction", sSA); httpObj.setRequestHeader("Content-Type","text/xml"); 2번째 줄은 MIME 타입이다. 우리는 이것을 웹서버에 SOAP 메시지임을 알려주기 위해서 text/xml 로 세팅해야한다. 최종적으로는 SOAP 메시지는 XML과 다른것이 없게 될것이다. HTTP를 이용한 SOAP의 사용은 특정 HTTP 헤더의 필요를 추가한다 : SOAPAction. SOAP 규격서 의 초기 버전은 호출되는 메서드를 구별해내는 데 SOAPMethodName 헤더를 사용했다. SOAP 1.1 규격에서, 이것은 SOAPAction의 호감때문에 거의 사용하지 않게 되었다. 필자는 여러 강좌에서 SOAPMessageName을 사용하는 것을 보아왔는데, 우리를 더욱 헷갈리게 하는것이다! SOAPAction 헤더는 SOAP 요청의 "의도"로 묘사된다. 글을 쓰고있는 동안, 이것은 자유 형식의 스트링이었고, 그래서 어떤 견고한 의미를 추출하는 것은 어려워 질것이다. 놀랍게도, 만일 SOAPAction이 URL을 포함하고 있다면, 그것은 있어야 할 필요가 없다(즉, 이것은 해결될 수 없고/접근될수 없다) : SOAPAction: http://www.craigmurphy.com/hrweb#getEmployeeDetail SOAP 1.1 규격서가 사용가능한 짧은 시간동안, 대부분의 여러분이 보고있는 예제들은 메서드의 이름을 구별하는데 SOAPAction을 사용한다. 이것이 완벽히 받아들일 수 있는 동안에, 우리는 미래의 우리 자신을 위해서 더 많은 일을 할 것이다. Body 요소에 있는 메서드의 이름과 SOAP 메시지의 "의도" 는 두개의 다른 짐승이다. Body 요소에서 아나 이상의 지정된 메서드를 가지는 것이 완벽하게 가능하다. 이것은 boxcarrying으로 알려져 있다. SOAP 메시지 "의도"를 구별할 필요는 HTTP 서비스(방화벽, 웹서버)에게 몇개의 프로세싱을 할 수 있는 기회를 허락하게 한다. 예를 들어 웹서버는 더 적당한 서버에게 메세지를 re-route 할 수 있거나, 로드 밸런싱 알고리즘을 실행하는 의도로 사용될 수 있다. HTTP 헤더를 사용하는 것은 우리에게 웹서버가 SOAP 메시지를 사용하는 XML을 분석하는데(parse) 필요로 하지 않고, "의도"를 관찰할 수 있는 추가된 이익을 제공한다. HTTP 헤더를 추출하는데 필요한 서버사이드의 자바스크립트는 다음과 같다 : var smn = new String(Request.ServerVariables("HTTP_SOAPACTION")); var sSOAPActionMethod = smn.substring(smn.lastIndexOf("#") + 1, smn.length); Body 요소에서 여러개의 메서드가 없다면, 우리는 실제로 SOAPAction 메서드가 Body 요소의 메서드와 매치되는 것을 확신할 수 있을 것이다 : if (sSOAPActionMethod == sMethod) switch (sMethod) { case "getEmployeeDetail": // get the details default: // handle unknown methods } 만일 SOAPAction이 Body 요소 메서드와 매치되지 않는다면, SOAP 리스너는 SOAP Fault라고 알리젼 것을 일으킨다. 같은 방식으로, 여러분의 응용프로그램이 "SOAP 요청에 하나이상의 메서드"(boxcarring)를 사용하려면, 그러면, 여러분은 여러분의 SOAP 요청을 일치시키는 메서드 추출코드를 변형할 필요가 있을 것이다. 이 예제에서 getEmployDetail을 사용하는 것은 자바스크립트 함수를 만들어내는 사소한 문제였다. 그러나 운영환경에서는 여러분은 COM 오브젝트가 여러분의 메서드와 비즈니스 로직을 캡슐화(encapsulate)하는데 검토되기를 좋아할 것이다. SOAP 응답 다루기 SOAP 응답은 단지 XML일뿐이다. 그래서 클라이언트는 마이크로소프트 XML 분석기(parser) 의 인스턴스를 이용해서 분석한다. 편하게도, XMLHTTP 컴퍼넌트는 우리에게 responseXML이라는 프로퍼티를 제공하는데, 그것은 XMLDOM의 인스턴스이다. 이것은 우리에게 다음과 같은 조금 장황하지만) 자바스크립트 코드를 제공한다 : // Send a SOAP request to get the selected employee details... g_employee=cmSOAP('getEmployeeDetail', cmSOAPrtXMLDOM, 'emp_no', sEmpNo); var SOAPEnvelope = g_employee; var oBody = SOAPEnvelope.selectSingleNode("//SOAP-ENV:Body"); var oResponse = oBody.firstChild; // Extract the nodes... var node_car_reg = oResponse.selectSingleNode("//car_reg"); var node_car_maker = oResponse.selectSingleNode("//car_maker"); var node_car_model = oResponse.selectSingleNode("//car_model"); var node_base_office = oResponse.selectSingleNode("//base_office"); var node_last_name = oResponse.selectSingleNode("//last_name"); var node_first_name = oResponse.selectSingleNode("//first_name"); // Populate the HTML controls... car_reg.value = node_car_reg.text; car_maker.value = node_car_maker.text; car_model.value = node_car_model.text; base_office.value = node_base_office.text; last_name.value = node_last_name.text; first_name.value = node_first_name.text; 예제 응용프로그램의 부분으로서, 필자는 cmSOAP라는 wrapper 함수를 생성했다. 이 함수는 변수를 매개변수(parameter)로 받는다. 첫번째 두개의 매개변수는 고정되어있다. 두개는 SOAP 메서드 이름과 "리턴 타입"이다. "리턴 타입"은 다음 세가지중의 하나를 가진다 : // cmSOAP Constants : return types var cmSOAPrtXML = 1; // return XML as a string var cmSOAPrtXMLDOM = 2; // return XMLDOM var cmSOAPrtObject = 3; // return a JavaScript object 다음에 따라오는 "리턴 타입"은 어떤숫자의 매개변수/값과도 짝이되거나, 혹은 정확하게, 요소와 요소의 값은 예를 들어 "emp_no","123" 같이 된다. 여러분은 여러분이 요청을 보낸 메서드와 매개변수에 따라서 요소와 값들을 지정할 수 있다. 우리의 경우에, getEmployeeDetail에서 지정될 것은 emp_no 밖에 없다. cmSOAPrtXMLDOM의 리턴 타입의 사용은 우리에게 해독가능한 코드를 쓰도록 허락한다. 그러나 각 HTML 컨트롤에서 oresponse.selectSingleNode()를 쓰는 것은 지루한 작업이다. 만일 우리가 노드 추출과 HTML 컨트롤 할당을 혼합하려고 한다해도, 그것은 아직도 많은 일이 남아있게 된다 : first_name.value = oResponse.selectSingleNode("first_name").text; 만일 우리의 클라이언트가 웹 페이지를 IE5 안에서 사용한다면, XML을 자바스크립트 오브젝트로 변환시켜주는 더 단정한 솔루션이 있을 것이다. 우리는 다음과 같은 자바스크립트 를 사용하여 이것을 얻을 수 있다 : var SOAPEnvelope = httpObj.ResponseXML; var oBody = SOAPEnvelope.selectSingleNode("//SOAP-ENV:Body"); var oMethod = oBody.firstChild; var s=""; var r = new Object(); var node,cnode; for (i=0; i < oMethod.childNodes.length; i++) { node = oMethod.childNodes[i]; s=s+'r.'+node.nodeName+' = new Object();\n'; if (node.childNodes.length != 0) { for (j=0; j < node.childNodes.length; j++) { cnode = node.childNodes[j]; s = s+'r.' + node.nodeName +'.'+cnode.nodeName+'="'+cnode.text+'";\n'; } } } eval(s); return r; 위에 있는 코드는 단순한 XMLDOM을 자바스크립트 오브젝트로 바꿀 수 있다. 그것은 XML요소 어트리뷰트를 다루는 것이 아니고, 쉽게 확장될 수 있다. 따라서 자바스크립트 오브젝트를 리턴하는 SOAP 응답을 다루는 우리의 코드는 다음과 같은 형태를 가진다 : // Send a SOAP request to get the selected employee details... g_employee=cmSOAP('getEmployeeDetail', cmSOAPrtObject, 'emp_no', sEmpNo); // Populate the HTML controls with the employee details with (g_employee) { employee.emp_no = sEmpNo; car_reg.value = employee.car_reg; car_maker.value = employee.car_maker; car_model.value = employee.car_model; base_office.value = employee.base_office; last_name.value = employee.last_name; first_name.value = employee.first_name; } 이러한 방식으로 사용하는 것의 장점은 : # 쉬운 가독성(readability) # XML의 확장된 이점은 잃어버리지 않은채, 컨버전이 동적으로 가능하다 # 오브젝트가 업데이트 될 수 있고, 서버로 되돌려 진다(약간의 자바스크립트를 XML 컨버전으로함) 예제 응용프로그램의 일부분으로서, XMLDOM이 사용되도록 허락하는 체크박스가 있거나, 자바스크립트 오브젝트가 있다. 여러분은 여러분이 좋아하는 메서드를 선택할 수 있다. 요 약 하 기 이 기사에서, 우리는 SOAP가 여러가지 개발 프로세스의 무대(stage)에서 사용될 수 있는지 알아보았다. 특별히 우리는 다음과 같은 것을 보았다 : # SOAP 요청(데이터를 요청하기) # SOAP 응답(데이터를 리턴하기) # HTTP에서 XML을 사용한 클라이언트 / 서버 커뮤니케이션 # XML을 자바스크립트 오브젝트 컨버전으로로 변환하기 여러분은 SOAP가 작동하는 할 수 있고, 작동하는 것을 보아왔다. 그러나 우리가 SOAP가 작동하는 것을 보는 동안에, 완벽히 문제가 해결된 것은 아니다. Larry Masinter는 SOAP 1.1 규격서에 관계된 일련의 책들을 썼다. 관련 링크를 찾아가 보기 바란다. Larry는 많은 시기적절한 시점을 만들어 냈는데, 대부분의 것은 제 시간에 언급될 것인데, 이런것은 우리에게 SOAP사용하는 것을 그만두게 하지는 않을 것이다. 결국, 우리는 영원히 펜스에 앉아 있을수만은 없다! 나는 여러분이 여기서 본 내용이 여러분의 일에 적용될 수 있기를 바란다. 다음 기사에서 필자는 어떻게 업데이트된 정보가 서버로 되돌려지는지 설명할 것이다. 우리는 또한 어떻게 SOAP가 우리에게 에러, 즉 SOAP 전문용어로 Fault,가 다루는 것을 허락하는지 알아볼 것이다. |
'웹서비스' 카테고리의 다른 글
SOAP을 이용하여 간단한 예제 (0) | 2010.07.07 |
---|---|
SOAP 메세지 암호화 하기 (0) | 2010.07.07 |
본문스크랩] 2.웹 서비스를 이용한 이기종간 오브젝트 전달 (0) | 2010.07.07 |
[SOAP] 인코딩이 웹서비스 퍼포먼스에 미치는 영향 (0) | 2010.07.07 |
[SOAP] 여러가지 문서 (0) | 2010.07.07 |