1:5000 web - Gipuzkoako Foru Aldundia

web-services-eko-bezero-aplikazioen-inplementazioa-edukia (PDF deskargatu)

1 Dokumentuaren deskribapena

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.

Volver al índice

2.1 Sarrera

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.

Volver al índice

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

Add New Data Source aukera

Wizard-eko lehenengo leihoa agertuko da.

Wizard-eko lehenengo leihoa

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

SOAP API aukera

"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.

URL testu-laukian  WSDL fitxategia

Hautatu "Add Reference" botoia eta hurrengo leihoa agertuko da.

Add Reference botoia

"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.

Solution Explorer leihoa

Menutik "Data->Show Data Sources" aukera hautatzean, Data Sources-en leihoa agertuko da.

Data Sources leihoa

Datuen egitura esploratzeko ireki daitekeen SOAP API-ko irteera-aldagai bakoitzeko Data Source bat agertuko da.

Volver al índice

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.

Adibidez: DataGrid bat gehitu daiteke DataSource-aren ikonoa formulariora arrastatuz

SOAP API-ra deitzeko, gehitu Button motako kontrol bat.

Button motako kontrol bat

Volver al índice

2.2.2 C# Kodea

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)
{

        // 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("D_4545","","0","Si",
                      "PUBLI", "200", "200", "NO", nomArr);
        // Erantzuna DataSource-i esleitu.
        listaDireccionesBindingSource.DataSource =
               webIdOut.objectOut.listaDirecciones;
}

Volver al índice

2.2.3 Adibidea probatu

Aplikazioa exekutatu, eskaria SOAP API-ra bidaltzeko botoia sakatu eta segundo batzuren ondoren, Grid-ean zerbitzuaren erantzuna agertuko da.

Eskaria SOAP API-ra bidaltzeko botoia

Volver al índice

2.2.4 Adibidea zabaldu

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.

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;

Volver al índice

2.2.5 Zabaldutako adibidea probatu

Adibidearen bertsio berria exekutatu eta id-arekin bat datorren eraikinean mapa agertuko da zentratuta.

Zabaldutako adibidea probatu

Id-a aldatzean eta zerbitzua abiaraztean, aurreko eskariaren datuak ezabatuko dira eta segundo batzuren ondoren, eskari berriaren datuak eta irudia agertuko dira.

Eskari berriaren datuak eta irudia agertuko dira

Volver al índice

3 Java bezero-aplikatiboa

3.1 Sarrera.

Kasu honetan, era berean WSDL deskribapen-artxiboa erabiliz, SOAP API bat erabiltzen duen bezero bat javan nola inplementatzen den deskribatzen da

Volver al índice

3.2 Baldintzak

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.

Volver al índice

3.3 Burutu beharreko prozesuak

Behin hori instalatuta, J2EE perspektibara sartuko gara eclipse plataformatik

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:

Behin eskuineko botoiarekin aukeratuta, irudian erakusten den bezala

Prozesuak zerbitzua egiaztatzeko beharrezkoak diren klase guztiak sortzen ditu; halaber, zerbitzarietan jsp orri batzuei alta ematen die, egiaztatzeko.

Prozesuak zerbitzua egiaztatzeko beharrezkoak diren klase guztiak

Java proiektu bat sortuko dugu zerbitzua egiaztatzeko:

Java proiektu bat sortuko dugu zerbitzua egiaztatzeko

Klasea WSExecutor.java, exekutatu daitekeena.

Volver al índice

3.4 Iturburu-kodea

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;

    }

Volver al índice

4 Web-bezeroa

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:

XML dokumentua

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:

itzulitako XML-a

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;

      }

  }

Volver al índice

5 PHP bezero-aplikatiboa

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.

Volver al índice

5.2 Baldintzak

PHP-ren 5.1.2. Bertsioa

NUSOAP Liburutegia, 0.7.2. bertsioa (http://sourceforge.net/projects/nusoap)

Volver al índice

5.3 Iturburu-kodea

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] => AltimetrA­a

               [grupo] => Nada

               [descripcion] => AltimetrA­a 100

               [mapa] => alti_100

               [CActivado] => S

         )

      [1] => Array

         (

                [MActivado] => s

                [GActivado] => S

                [clase] => AltimetrA­a

                [grupo] => Nada

                [descripcion] => AltimetrA­a 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] => AltimetrA­a

                [grupo] => Nada

               [descripcion] => AltimetrA­a 100

               [mapa] => alti_100

                [CActivado] => S

            )

      [1] => Array

           (

               [MActivado] => s

               [GActivado] => S

               [clase] => AltimetrA­a

                [grupo] => Nada

                [descripcion] => AltimetrA­a 25

                [mapa] => alti_25

                [CActivado] => S

            )

               .

               .

               .

               )

        )

   )

Volver al índice

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.

Volver al índice

6.2 PDA proiektua sortzea

PDA baterako proiektua sortzeko, "Device Application" motako proiektu bat sortzen da.

Device Application motako proiektua

"OK" aukeratzean, formulario bat agertuko da PDA irudi baten barruan.

formulario bat agertuko da PDA irudi baten barruan

Volver al índice

6.3 "DibujarImagen" SOAP API-aren aplikatibo kontsumitzaile bat sortzea

Data menutik, hautatu "Add New Data Source" aukera.

Data Menu

Wizard-eko lehenengo leihoa agertuko da.

Wizard-eko leihoa

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

SOAP API

"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.

zerbitzuak dituen metodoen zerrenda

Hautatu "Add Reference" botoia eta hurrengo leihoa agertuko da.

add reference lehioa

"Finish" aukeratzean, Wizard-aren leihoa itxi egingo da eta automatikoki emaitzari erreferentzia berria gehituko zaio eta "Data Source" sortuko da.

Volver al índice

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-a abiaraztu

Volver al índice

6.3.2 C# Kodea

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);}

       // Mapa eskatu eta marraztu

     Uri uri1 = new Uri(out1.oimagepathOut);

     HttpWebRequest request1 =

          (HttpWebRequest)WebRequest.Create(uri1);

     HttpWebResponse response1 =

          (HttpWebResponse)request1.GetResponse();

     StreamReader reader1 = new

          StreamReader(response1.GetResponseStream());

     Bitmap bitmap1 = new Bitmap(reader1.BaseStream);

     pictureBox1.Image = bitmap1;

     reader1.Close();

     Cursor.Current = Cursors.Default;

  }

Volver al índice

6.3.3 Adibidea probatu emuladorearekin.

Aplikazioa exekutatzean, zabaltzen den ondoko leihoa agertuko da.

zabaltzen den ondoko leihoa

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

Software-a emuladorean instalatuko da eta leiho bat agertuko da

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

Device Emulator Manager

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

Pocket PC 2003 SE Emulator

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

Gipuzkoaren irudi bat

Volver al índice

Gipuzkoako Atari Instituzionalaren logotipoa eta orri nagusirako esteka
  | Gipuzkoa.net   | Ingurumeneko eta Lurralde Antolaketako Departamentua     © 1997-2012