web-services-eko-bezero-aplikazioen-inplementazioa-edukia (PDF deskargatu)
Dokumentu honek SOAP API-ko aplikatibo kontsumitzaileen prototipoak deskribatzen ditu, plataformaren gaur egungo bertsioan dauden Web Zerbitzu Espazialen integrazioaren adibide gisa garatu direnak.
Inplementatutako prototipoak deskribatzen ditu eta bestelako garapen-plataformetan beste bezero-aplikatiboak garatzeko gidaliburu gisa balio du.
Bezero-aplikatiboen lau prototipo zehazten dira lau teknologia ezberdinetan, Web Zerbitzuen elkarreragingarritasuna erakusten dutenak.
Prototipoak inplementatzen dituzten lau teknologiak honakoak dira: .Net, Java, Web-bezero bat eta php.
Badago .Net teknologian garatutako prototipo bat Plataformako Web Zerbitzu ezberdinek eskainitako funtzionalitate osoa inplementatzen duena (Ikus http://b5m.gipuzkoa.net/appws/publish.htm) Horren konplexutasuna dela-eta, dokumentu honetan prototipo laburtu bat deskribatzen da.
Microsoft-en .Net plataforman bezeroaren garapena Visual Studio 2005 garapen-ingurunearekin eta C# programazio-lengoaiarekin burutu da. Deskribatzen den prototipoa Localizar por ID delakoaren SOAP API-ra sartzen da.
2.2 "Localizar por ID" SOAP API-aren aplikatibo kontsumitzaile bat sortzea
2 .Net bezero-aplikatiboa
2.2 "Localizar por ID" SOAP API-aren aplikatibo kontsumitzaile bat sortzea
Wizard-eko lehenengo leihoa agertuko da.
Hautatu "SOAP API" aukera eta "Next" botoia, eta hurrengo leihoa, Web erreferentziena, agertuko da.
"url" testu-laukian, erabili nahi den SOAP API-arekin bat datorren WSDL fitxategia tekleatu.
http://b5m.gipuzkoa.net/dfg-localizar-context-root/LocalizarPorIdSoapHttpPort?WSDL
Segundo batzuren ondoren, zerbitzuak dituen metodoen zerrenda bat agertuko da.
Hautatu "Add Reference" botoia eta hurrengo leihoa agertuko da.
"Finish" aukeratzean, Wizard-aren leihoa itxi egingo da eta automatikoki emaitzari erreferentzia berria gehituko zaio eta "Data Source" sortuko da.
"Solution Explorer" leihoan Web erreferentzia berria agertuko da.
Menutik "Data->Show Data Sources" aukera hautatzean, Data Sources-en leihoa agertuko da.
Datuen egitura esploratzeko ireki daitekeen SOAP API-ko irteera-aldagai bakoitzeko Data Source bat agertuko da.
2.2.1 Aplikatiboari kontrolak gehitzea
SOAP API-aren erantzuna ikusteko, DataGrid bat gehitu daiteke DataSource-aren ikonoa formulariora arrastatuz. Adibidean "LocalizarPorIdUser_localizaridcallejero_Out -> objectOut ->listaDirecciones" egitura arrastatzen da zerbitzutik formulariora.
SOAP API-ra deitzeko, gehitu Button motako kontrol bat.
SOAP API-ra sartzeko kodea "button1_Click" metodoan sartzen da. Diseinu moduan botoiaren gainean klik bikoitza eginez klase hutsa sortzen da kodifikazio moduan.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
}
}
}
Gehitu kodearen hurrengo lerroak button1_Click() metodoari..
private void button1_Click(object sender, EventArgs e)Aplikazioa exekutatu, eskaria SOAP API-ra bidaltzeko botoia sakatu eta segundo batzuren ondoren, Grid-ean zerbitzuaren erantzuna agertuko da.
Imagen="Si" sparametroarekin, zerbitzuak erabili ez den Id "D_4545"-arekin bat datorren irudi bat sortu du. Atal honetan adibidea zabaltzen da irudia marrazteko.
Lehenengo diseinu moduan dagoen formulariora itzuli behar da eta mapa erakusteko erabiltzen den PictureBox bat eta eraikinaren identifikadorea sartzeko TextBoxs bat gehitu behar dira.
Jarraian irudiaren tratatzeko aldatutako metodoa agertuko da. Gainera, irudia garbitzeko kodea eta DataSource-a aldatu dira, eta zerbitzua exekutatzen den bitartean kurtsorearen egoera eguneratu da.
private void button1_Click(object sender, EventArgs e)
{
// Kurtsorea aldatu..
Cursor.Current = Cursors.WaitCursor;
// DataSource-a garbitu
listaDireccionesBindingSource.Clear();
// Irudia garbitu.
if (pictureBox1.Image != null)
pictureBox1.Image = null;
Refresh();
// SOAP API klaseko instantzia berri bat sortu.
net.gipuzkoa.b5m.LocalizarPorId webId = new
net.gipuzkoa.b5m.LocalizarPorId();
// Geruza-array gehigarri nuluak.
net.gipuzkoa.b5m.WsmapasselectUser[] nomArr = null;
// SOAP API-ra deitu eta erantzuna jaso.
net.gipuzkoa.b5m.LocalizarPorIdUser_localizaridcallejero_Out
webIdOut = webId.localizaridcallejero (richTextBox1.Text,
"", "0", "Si", "VITO",
pictureBox1.Width.ToString(),
pictureBox1.Height.ToString(), "NO", nomArr);
// Erantzuna DataSource-i esleitu.
listaDireccionesBindingSource.DataSource =
webIdOut.objectOut.listaDirecciones;
// Irudiaren URL-a jaso
string IdCallUrl = Convert.ToString(webIdOut.imagenurlOut);
// Mapa eskatu eta marraztu
if (webIdOut.imagenurlOut != null)
{
WebRequest WReq = WebRequest.Create(IdCallUrl);
WebResponse WRes = WReq.GetResponse();
Stream strm = WRes.GetResponseStream();
Image WImage = Image.FromStream(strm);
pictureBox1.Image = WImage;
}
// Default kursor utzi.
Cursor.Current = Cursors.Default;
}
Gainera, proiektuari ondoko namespaces-ak gehitu behar zaizkio.
using System.Net;
using System.IO;
2.2.5 Zabaldutako adibidea probatu
Adibidearen bertsio berria exekutatu eta id-arekin bat datorren eraikinean mapa agertuko da zentratuta.
Id-a aldatzean eta zerbitzua abiaraztean, aurreko eskariaren datuak ezabatuko dira eta segundo batzuren ondoren, eskari berriaren datuak eta irudia agertuko dira.
3.1 Sarrera.
Kasu honetan, era berean WSDL deskribapen-artxiboa erabiliz, SOAP API bat erabiltzen duen bezero bat javan nola inplementatzen den deskribatzen da
ECLIPSE WTP PROJECT softwarea erabiltzen da bezero motak sortzeko WSDL deskribapen-artxibotik abiatuta. Software hori honako helbidetik deskargatu daiteke:
http://www.eclipse.org/webtools/main.html
Taipatutako proiektuak beharrezko plugin guztiak eta Eclipse plataforma ditu; beharrezko JVM-a 1.5 da.
http://java.sun.com/j2se/1.5.0/download.jsp
Bi kasuetan emandako url-etan deskribatzen diren instalazio-argiibideak jarraitu behar dira.
3.3 Burutu beharreko prozesuak
Behin hori instalatuta, J2EE perspektibara sartuko gara eclipse plataformatik
Karpetan proiektu berri bat sortzen da: Dynamic Web Projets
Kasu honetan DFGWeb, eta wsdl deskribapen-artxiboa WSDL direktorioan jarriko dugu. Behin eskuineko botoiarekin aukeratuta, irudian erakusten den bezala, ondoko klaseak sortuko ditugu:
Prozesuak zerbitzua egiaztatzeko beharrezkoak diren klase guztiak sortzen ditu; halaber, zerbitzarietan jsp orri batzuei alta ematen die, egiaztatzeko.
Java proiektu bat sortuko dugu zerbitzua egiaztatzeko:
Klasea WSExecutor.java, exekutatu daitekeena.
3.4.1 WSExecutor.java
Main
public static void main(String[] args) {
WSExecutor we = new WSExecutor();
we.testTopo();
}
testTopo proba burutzen du:
private void testTopo() {
String topo = "DONOXTI";
String lengua = "0";
boolean bprint = true;
try {
WstopobjUser[] wu = dooToponimo(topo, lengua);
if (bprint == true) {
printData(wu);
}
} catch (Exception e) {
e.printStackTrace();
}
}
eta dooToponimo funtzioa:
public WstopobjUser[] dooToponimo(String topo, String lengua) throws RemoteException {
//itzuli beharreko objektuen array-a
WstopobjUser[] wu = null;
//Proxy-a sortuko dugu
BuscartoponimoProxy btp = new BuscartoponimoProxy();
//Parametroak sortuko ditugu
Buscartoponimo parameters = new Buscartoponimo();
//balioak esleituko ditugu
parameters.setToponimo(topo);
parameters.setLengua(lengua);
//zerbitzua exekutatuko dugu
BuscartoponimoResponse bpr = btp.buscartoponimo(parameters);
//emaitza lortuko dugu
BuscartoponimoUser_buscartoponimo_Out bubo = bpr.getResult();
BigDecimal bd = bubo.get_return();
wu = bubo.getToponimoarrOut();
return wu;
}
AJAX teknologiak web aplikazioak garatzea ahalbidetzen du, dinamismo maila handi batekin. Orokorrean, bezero-aldean aplikazioaren logika duen zerbitzari bati XML eskariak burutzeko script lengoaia bat (Javascript, Jscript,...) erabiltzean datza.
Horrenbestez, AJAX, web zerbitzuetara deiak burutzeko erabil daiteke. Jarraian zehaztuko dira plataformaren web zerbitzu bati JavaScript-en bitartez dei bat burutzen dion web-orri bat inplementatzeko eman behar diren pausoak.
Zehazki "localizar objeto por ID" web zerbitzua erabiliko da, eta zehazki, kale-izendegiaren gaian ID D_4545 duen eraikina bilatuko da. Bilaketaren hizkuntza gaztelania izango da.
Objektua kokatzeko web zerbitzua jarraian adierazten den XML formatua duen eskariaren zain dago:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body xmlns:ns1="http://com/dfg/webservices/LocalizarPorId.wsdl/types/">
<ns1:localizaridcallejeroElement>
<ns1:identificador>D_4545</ns1:identificador>
<ns1:escala>12000</ns1:escala>
<ns1:lengua>0</ns1:lengua>>
<ns1:imagen>si</ns1:imagen>
<ns1:escenario>VITO</ns1:escenario>
<ns1:anchura>640</ns1:anchura>
<ns1:altura>480</ns1:altura>
</ns1:localizaridcallejeroElement>
</soap:Body>
</soap:Envelope>
Javascript-ean eman beharreko lehenengo pausoa, beraz, web zerbitzura bidaliko den XML dokumentua sortzea izango litzateke:
var xmlDoc = createNewDocument();
Hurrengo pausoa XML-ri goiburua jartzea izango litzateke:
var envelope = createElementNS(xmlDoc, 'http://schemas.xmlsoap.org/soap/envelope/', 'Envelope');
xmlDoc.appendChild(envelope);
var body = createElementNS(xmlDoc,
'http://schemas.xmlsoap.org/soap/envelope/', 'Body');
envelope.appendChild(body);
var parameterParent = body;
parameterParent = createElementNS(xmlDoc,
'http://com/dfg/webservices/LocalizarPorId.wsdl/types/',
'localizaridriosElement');
body.appendChild(parameterParent);
createElementNS() eta appendChild() funtzioek XML-ren egitura sortzen dute. CreateElementNS() delakoarekin dokumentuan elementu berri bat sortzen da eta appendChild() delakoarekin, dokumentuaren barruan hierarkia-ordena egokia ematen zaio.
Hurrengo pausoa web zerbitzuak behar dituen parametroetako bakoitzari balioak ematea izango litzateke. Eraikinaren identifikadorearen kasuan horrela izango litzateke:
paramEl.appendChild(xmlDoc.createTextNode(D_4545));
parameterParent.appendChild(paramEl);
Aurreko pausoa eskariaren parametro bakoitzerako (hizkuntza, irudia, lekua,...) burutzea beharrezkoa da.
Puntu honetan jada sortuta dago XML dokumentua; web-orriak ikusiko balitz, honela geratuko litzateke:

Eman beharreko hurrengo pausoa sortu den XML-a bidaltzen duen web zerbitzura deitzea da. Javascript-etik XML bidali ahal izateko, XmlHttpRequest objektua erabil daiteke, nabigatzaile gehienek inplementatzen dutena.
XmlHttpRequest objektua beste modu batera sortzen da, erabiltzen den Interneteko nabigatzailearen arabera. Hurrengo kodeak lortu nahi den objektua sortuko luke:
var req = null;
if (window.XMLHttpRequest) { // Si no es Internet Explorer
req = new XMLHttpRequest();
} else if (window.ActiveXObject) { //Si es Internet Explorer
req = new ActiveXObject("Microsoft.XMLHTTP");
}
Behin sortuta konfiguratu egin behar da. Lehenengo egin beharreko eskari mota (GET edo POST) pasatu behar zaio eta web zerbitzuaren url-a.
req.open("POST", url, false);
Ondoren, behar duen "Content-Type"-a konfiguratu behar zaio, kasu honetan, "text/xml".
req.setRequestHeader("Content-Type", "text/xml");
Azkenik, XML-a bidal daiteke send() funtzioaren bitartez,
req.send(xmlDoc);
Aurreko kode guztia web zerbitzuaren url-a eta bidali beharreko XML-a jasotzen dituen eta zerbitzuaren erantzuna itzultzen duen funtzio batean bil daiteke. Adierazitako kodea honakoa litzateke:
function invokeSync (url, xmlDoc) {
var req = null;
if (window.XMLHttpRequest) { // Si no es Internet Explorer
req = new XMLHttpRequest();
} else if (window.ActiveXObject) { //Si es Internet Explorer
req = new ActiveXObject("Microsoft.XMLHTTP");
}
if (req) {
req.open("POST", url, false);
req.setRequestHeader("Content-Type", "text/xml");
req.send(xmlDoc);
return req.responseXML;
}
}
Web zerbitzura aurreko parametrokin deituz gero, honakoa itzuliko litzateke:
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns0="http://com/dfg/webservices/LocalizarPorId.wsdl/types/">
<env:Body>
<ns0:localizaridcallejeroResponseElement>
<ns0:result>
<ns0:imagenurlOut>
http://arqfotos:9876/internet/GenaImageSourcer? ?
IMAGEID=164566151176& RETCONTENTTYPE=image/png&RM=FALSE </ns0:imagenurlOut>
<ns0:return>OK</ns0:return>
<ns0:objectOut>
<ns0:listaDirecciones>
<ns0:array>
<ns0:nombre>SALESIANOS, CONVENTO</ns0:nombre>
<ns0:seccion>002</ns0:seccion>
<ns0:numero>012 </ns0:numero>
<ns0:terminoMunicipal xsi:nil="1"/>
<ns0:nucleoUrbano xsi:nil="1"/>
<ns0:distrito>02</ns0:distrito>
<ns0:municipio>AZKOITIA | 017</ns0:municipio>
<ns0:codigoPostal>20720</ns0:codigoPostal>
<ns0:comarca xsi:nil="1"/>
<ns0:calle>AIZKIBEL KALEA | 1240</ns0:calle>
</ns0:array>
</ns0:listaDirecciones>
<ns0:listaActividades xsi:nil="1"/>
</ns0:objectOut>
</ns0:result>
</ns0:localizaridcallejeroResponseElement>
</env:Body>
</env:Envelope>
Web zerbitzuak itzulitako XML-a Javascript-en aztertu ahal izango litzateke informazioa lortzeko eta era egokian web-orri batean erakusteko, edo soilik itzulitako XML-a erakuts daiteke:

Azkenik, dokumentu honetan eskaria burutzeko erabilitako funtzioen kode osoa eta prozesu osoa burutzen duen funtzio nagusi berri bat erakusten dira. Funtzioa LocalizarPorIdSoapHttpPort_localizaridcallejero() da eta parametro gisa web zerbitzuaren eskaria burutzeko beharrezkoak diren datu guztiak jasotzen ditu, beharrezko XML-a sortzen du, zerbitzura bidaltzen du eta azkenik, zerbitzariaren erantzunaren XML-a itzultzen du.
function LocalizarPorIdSoapHttpPort_localizaridcallejero(_identificador, _escala, _lengua, _imagen, _escenario, _anchura, _altura) {
var xmlDoc = createNewDocument();
var envelope = createElementNS(xmlDoc, 'http://schemas.xmlsoap.org/soap/envelope/', 'Envelope');
xmlDoc.appendChild(envelope);
var body = createElementNS(xmlDoc, 'http://schemas.xmlsoap.org/soap/envelope/', 'Body');
envelope.appendChild(body);
var parameterParent = body;
parameterParent = createElementNS(xmlDoc, 'http://com/dfg/webservices/LocalizarPorId.wsdl/types/', 'localizaridcallejeroElement');
body.appendChild(parameterParent);
var paramEl = createElementNS(xmlDoc, 'http://com/dfg/webservices/LocalizarPorId.wsdl/types/', 'identificador');
paramEl.appendChild(xmlDoc.createTextNode(_identificador));
parameterParent.appendChild(paramEl);
var paramEl = createElementNS(xmlDoc, 'http://com/dfg/webservices/LocalizarPorId.wsdl/types/', 'escala');
paramEl.appendChild(xmlDoc.createTextNode(_escala));
parameterParent.appendChild(paramEl);
var paramEl = createElementNS(xmlDoc, 'http://com/dfg/webservices/LocalizarPorId.wsdl/types/', 'lengua');
paramEl.appendChild(xmlDoc.createTextNode(_lengua));
parameterParent.appendChild(paramEl);
var paramEl = createElementNS(xmlDoc, 'http://com/dfg/webservices/LocalizarPorId.wsdl/types/', 'imagen');
paramEl.appendChild(xmlDoc.createTextNode(_imagen));
parameterParent.appendChild(paramEl);
var paramEl = createElementNS(xmlDoc, 'http://com/dfg/webservices/LocalizarPorId.wsdl/types/', 'escenario');
paramEl.appendChild(xmlDoc.createTextNode(_escenario));
parameterParent.appendChild(paramEl);
var paramEl = createElementNS(xmlDoc, 'http://com/dfg/webservices/LocalizarPorId.wsdl/types/', 'anchura');
paramEl.appendChild(xmlDoc.createTextNode(_anchura));
parameterParent.appendChild(paramEl);
var paramEl = createElementNS(xmlDoc, 'http://com/dfg/webservices/LocalizarPorId.wsdl/types/', 'altura');
paramEl.appendChild(xmlDoc.createTextNode(_altura));
parameterParent.appendChild(paramEl);
var responseDoc = invokeSync('http://arqfotos:8888/dfg-loid/LocalizarPorIdSoapHttpPort', xmlDoc);
return responseDoc;
}
function createElementNS (xmlDoc, namespace, localName) {
var element = null;
if (typeof xmlDoc.createElementNS != 'undefined') {
element = xmlDoc.createElementNS(namespace, localName);
}
else if (typeof xmlDoc.createNode != 'undefined') {
if (namespace) {
element = xmlDoc.createNode(1, localName, namespace);
} else {
element = xmlDoc.createElement(localName);
}
}
return element;
}
function createNewDocument () {
var xmlDoc = null;
if (document.implementation && document.implementation.createDocument) {
xmlDoc = document.implementation.createDocument("", "", null);
} else if (window.ActiveXObject){
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
}
return xmlDoc;
}
function invokeSync (url, xmlDoc) {
var req = null; if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
if (req) {
req.open("POST", url, false);
req.setRequestHeader("Content-Type", "text/xml");
req.send(xmlDoc);
return req.responseXML;
}
}
5.1 Sarrera
Kasu honetan, era berean WSDL deskribapen-artxiboa erabiliz SOAP API bat erabiltzen duen bezero bat PHP-n nola inplementatzen den deskribatzen da.
PHP-ren 5.1.2. Bertsioa
NUSOAP Liburutegia, 0.7.2. bertsioa (http://sourceforge.net/projects/nusoap)
1. Adibidea: Web zerbitzura deitu mapa marrazteko.
<?php
// Liburutegiak kargatu.
require_once('./lib/nusoap.php');
// Produkzioa
$wsdl="http://b5m.gipuzkoa.net/ws/dfg-dibujar-context-root/DibujarSoapHttpPort?WSDL";
// WSDL-a irakurri eta proxy-ak sortu
$client=new soapclient($wsdl, 'wsdl');
// url endpoint-a aldatu $wsdl-ra, azkeneko 5 char-ak izan ezik
$client->operations['dibujarimagen']['endpoint'] = substr($wsdl,0,strlen($wsdl)-5);
// Char set-ak behartu.
$client->soap_defencoding = 'UTF-8';
$client->decode_utf8 = false;
// Geruzen kontrolaren adibidea.
$mapasel=array('nombre'=>'L%EDmites municipales','estado'=>'n','tipo'=>'Mapa');
// Parametroen adibidea
$params=array(array('ix1'=>'540000','iy1'=>'4740000','ix2'=>'610000','iy2'=>'4810000','iwidth'=>'500','iheight'=>'300','iescenario'=>'PUBLI','lengua'=>'0','mapaselectarr'=>$mapasel));
// Akatsen egiaztapena.
$err = $client->getError();
if ($err) {
echo 'Constructor error' . $err ;
}
// SOAP API-ra deitu.
$result = $client->call('dibujarimagen', $params);
// Akatsen egiaztapena.
if ($client->fault) {
echo 'Fault'; print_r($result);
} else {
$err = $client->getError();
if ($err) {
echo 'Error' . $err ;
}
}
// Emaitzak ikusi
print_r($result);
// Arazteko tresnak
//echo $client->response;
//echo $client->request;
//echo $client->debug_str;
?>
UNIX-eko shell batetik PHP adibidea exekutatzen bada honako emaitza ikusiko da.
$ php dib.php
Array
(
[result] => Array
(
[return] => 1
[oimagepathOut]=>
http://b5m.gipuzkoa.net/internet/GenaImageSourcer?IMAGEID=2034743655&RETCONTENTTYPE=image/png
)
)
Irudia berreskuratzeko http eskari bat exekutatu behar da oimagepathOut aldagaiean emandako url-arekin.
2. Adibidea: Web zerbitzura deitu geruza erabilgarriak ikusteko.
<?php
// Liburutegiak kargatu.
require_once('./lib/nusoap.php');
// Produkzioa
$wsdl="http://b5m.gipuzkoa.net/ws/dfg-dibujar-context-root/DibujarSoapHttpPort?WSDL";
// WSDL-a irakurri eta proxy-ak sortu
$client=new soapclient($wsdl, 'wsdl');
// url endpoint-a aldatu $wsdl-ra, azkeneko 5 char-ak izan ezik
$client->operations['mapasdisponibles']['endpoint'] = substr($wsdl,0,strlen($wsdl)-5);
// Char set-ak behartu.
$client->soap_defencoding = 'UTF-8';
$client->decode_utf8 = false;
// Parametroen adibidea
$params1=array(array('categoria'=>'PUBLI','lengua'=>'0'));
// Akatsen egiaztapena.
$err = $client->getError();
if ($err) {
echo 'Constructor error' . $err ;
}
// SOAP API-ra deitu.
$result = $client->call('mapasdisponibles', $params1);
if ($client->fault)
{
echo 'Fault'; print_r($result);
}
else
{
$err = $client->getError();
if ($err)
{
echo 'Error' . $err ;
}
else
{
// Emaitzak ikusi
print_r( $result ) ;
}
}
?>
UNIX-eko shell batetik PHP adibidea exekutatzen bada honako emaitza ikusiko da.
$ php mapas.php
Array
(
[result] => Array
(
[return] => Array
(
[wsmessage] => OK
[wsstatus] => 5
)
[objectOut] => Array
(
[0] => Array
(
[MActivado] => s
[GActivado] => S
[clase] => AltimetrAa
[grupo] => Nada
[descripcion] => AltimetrAa 100
[mapa] => alti_100
[CActivado] => S
)
[1] => Array
(
[MActivado] => s
[GActivado] => S
[clase] => AltimetrAa
[grupo] => Nada
[descripcion] => AltimetrAa 25
[mapa] => alti_25
[CActivado] => S
)
.
.
.
)
)
)
$ php mapas.php
Array
(
[result] => Array
(
[return] => Array
(
[wsmessage] => OK
[wsstatus] => 5
)
[objectOut] => Array
(
[0] => Array
(
[MActivado] => s
[GActivado] => S
[clase] => AltimetrAa
[grupo] => Nada
[descripcion] => AltimetrAa 100
[mapa] => alti_100
[CActivado] => S
)
[1] => Array
(
[MActivado] => s
[GActivado] => S
[clase] => AltimetrAa
[grupo] => Nada
[descripcion] => AltimetrAa 25
[mapa] => alti_25
[CActivado] => S
)
.
.
.
)
)
)
6 PDA Windows Mobile Aplikatiboa
6.1 Sarrera
PDA bezeroaren adibidea Microsoft-en .Net Compact Framework 2.0 plataformarekin, Visual Studio 2005 garapen-ingurunearekin eta C# programazio-lengoaiarekin burutu da. Deskribatzen den prototipoa DibujarImagen delakoaren WebService-era sartzen da.
PDA baterako proiektua sortzeko, "Device Application" motako proiektu bat sortzen da.
"OK" aukeratzean, formulario bat agertuko da PDA irudi baten barruan.
6.3 "DibujarImagen" SOAP API-aren aplikatibo kontsumitzaile bat sortzea
Data menutik, hautatu "Add New Data Source" aukera.

Wizard-eko lehenengo leihoa agertuko da.

Hautatu "SOAP API" aukera eta "Next" botoia, eta hurrengo leihoa, Web erreferentziena, agertuko da.

"url" testu-laukian, erabili nahi den SOAP API-rekin bat datorren WSDL fitxategia tekleatu.
Adibidea: Dibujar.
http://b5m.gipuzkoa.net/dfg-dibujar-context-root/DibujarSoapHttpPort?WSDL
Segundo batzuren ondoren, zerbitzuak dituen metodoen zerrenda bat agertuko da.

Hautatu "Add Reference" botoia eta hurrengo leihoa agertuko da.
"Finish" aukeratzean, Wizard-aren leihoa itxi egingo da eta automatikoki emaitzari erreferentzia berria gehituko zaio eta "Data Source" sortuko da.
6.3.1 Aplikatiboari kontrolak gehitzea
SOAP API-a abiarazteko, Button motako kontrol bat gehitu behar da. Eta emaitza ikusteko PictureBox motako kontrol bat gehitu behar da.
SOAP API-ra sartzeko kodea "button1_Click" metodoan sartzen da. Diseinu moduan botoiaren gainean klik bikoitza eginez klasea hutsik sortzen da kodifikazio moduan.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace DeviceApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
}
}
}
Gehitu kodearen hurrengo lerroak button1_Click() metodoari.
private void button1_Click(object sender, EventArgs e)
{
// Geruza-array gehigarri nuluak.
net.gipuzkoa.b5m.WsmapasselectUser[] userArray1 = null;
Cursor.Current = Cursors.WaitCursor;
// SOAP API klaseko instantzia berri bat sortu.
net.gipuzkoa.b5m.Dibujar webDibImg =
new net.gipuzkoa.b5m.Dibujar();
// SOAP API-ra deitu eta erantzuna jaso.
net.gipuzkoa.b5m.DibujarUser_dibujarimagen_Out out1 =
webDibImg.dibujarimagen("520000","4740000","610000",
"4810000", pictureBox1.Width.ToString(),
pictureBox1.Height.ToString(),
"PUBLI", "0", userArray1);}
6.3.3 Adibidea probatu emuladorearekin.
Aplikazioa exekutatzean, zabaltzen den ondoko leihoa agertuko da.

"Pocket PC 2003 SE Emulator" aukera hautatu eta "Deploy" botoia sakatu. Software-a emuladorean instalatuko da eta leiho bat agertuko da, aplikazioa martxan duena

Interneteko konexioa ezartzeko ActiveSync-ekin konexio fisikoa emulatu behar da eta hori "Device Emulator Manager" delakoarekin egiten da, "Tools" menutik abiarazten dena.

"Emulator Manager" delakoa abiarazi ondoren, "Pocket PC 2003 SE Emulator" aukera hautatu behar da eta eskuineko botoiarekin, "Cradle" aukera hautatu.

ActiveSync-en ikono grisa berde bihurtuko da eta asoziazio-leihoa "Guest" aukera hautatu daitekeen lekuan agertuko da. Behin konektatuta, eskaria SOAP API-ra bidaltzeko botoia sakatu eta segundo batzuren ondoren, Gipuzkoaren irudi bat agertuko da