SOAP servis

Sekcia: Programovanie 12.07.2010 | 12:00
Nickname   Návštevník
Zdravim mam taky problem potrebujem cez SOAP komunikovat s klientom na pozadi
serveru bezi nekonecny cyklus ktory (momentalne) inkrementuje cislo, potreboval
by som vsak toto aktualne cislo zobrazit u uzivatela v prehliadaci, avsak so
SOAPom vela skusenosti nemam...nevedel by niekto pomoct? nie do databazy to
cislo ukladat nebudem...

velka vdaka za pomoc
    • Re: SOAP servis 12.07.2010 | 12:08
      Avatar Milan Dvorský debian,mint kde,android  Administrátor
      relativne myslim, ze aj PHP zvlada komunikaciu cez SOAP
      • Re: SOAP servis 12.07.2010 | 12:19
        Nickname   Návštevník
        co som uz googlil tak zvlada, avsak stale som nevygooglil ako na to :(
    • Re: SOAP servis 12.07.2010 | 12:20
      jimik   Návštevník
      ano, do php existuje soap mod, ale existuje aj nusoap. ja pouzivam nusoap, lebo :
      -mod na hostingu nemusi byt
      -da sa upravit

      ten druhy dovod je podstatny, ked chcem komunikovat s microsoftackym soap serverom - hajzlik to berie trocha svojsky ... ;-)

      • Re: SOAP servis 12.07.2010 | 13:10
        Nickname   Návštevník
        hmm a nevedel by si mi nejak poradit co sa toho tyka ako to spravit? :P lebo ja sa snazim hladam na nete a nejde a nejde :P otrebujem nieco ako keby som mal poslat parameter klientovi a nie klient serveru nieco na styl:

        $server->addFunction("getCatalogEntry('$i')"); ale toto vsak nejde parameter mozem posielat iba z klienta a to stylom

        $client->getCatalogEntry('nejaky integer'); ja si s tym vobeec neviem dat rady :( navyse ked to bude v nekonecnom cykle na serveri ta inkrementacia zobrazi sa aktualne cislo klientovi v prehliadaci?

        • Re: SOAP servis 12.07.2010 | 13:50
          jimik   Návštevník
          no budes si musiet precitat ako ten soap funguje ;-) na serveri vytvoris sluzbu, v obsuznej funkcii tej sluzby bude tvoje $i

          tu je dobty priklad http://www.scottnichol.com/nusoapprogwsdl.htm

          klientovy sa zobrazi cislo, ktore bude na serveri v momente zaslania poziadavky od klienta.
          • Re: SOAP servis 12.07.2010 | 16:57
            Nickname   Návštevník
            vdaka,
            skusal som nieco na styl: server
            $i=0;
            while(true)
            {
            $i++;
            }
            function getCatalogEntry($catalogId) {
            return $i;
            }
            ini_set("soap.wsdl_cache_enabled", "0");
            $server = new SoapServer("catalog.wsdl");
            $server->addFunction("getCatalogEntry");
            $server->handle();

            ktore bezi v konzole a:
            $client = new SoapClient("catalog.wsdl");
            $catalogId='catalog2';
            $response = $client->getCatalogEntry($catalogId);
            echo $response;
            ktore bezi u klienta... avsak ked spustim klienta browser zamrzne

            skusal som while prepisat aj na
            function getCatalogEntry($catalogId) {
            while(true)
            {
            $i++;
            return $i;
            }
            }

            ale to vzdy vypisalo iba 2 pretoze ta funkcia sa zavolala iba raz

            nejake napady ako to spravit alebo nieco? :P vdaka
            • Re: SOAP servis 13.07.2010 | 10:47
              jimik   Návštevník
              hmm, asi trocha nerozumiem, klient bude dalsi server s php?
              ja by som skopiroval kod z toho prikladu a upravil 'hello'. a ten nekonecny cyklus - ked tam php vojde, tak uz nevyjde (neviem ako je to pri preteceni...) takto to nefunguje, na serveri php nebezi na pozadi. ten cyklus sa spusti, ked posles soap request, ale ostane v nom vysiet do nekonecna. ak potrebujes na testovanie posielat nejaky integer, ktory sa inkrementuje mozes pouzit timestamp ;-) function hello($name) {
              return time();
              }
              • Re: SOAP servis 13.07.2010 | 13:14
                Nickname   Návštevník
                no ono to inkrementovanie $i bolo len skusobne... mal som v plane ze neskor miesto $i sa budu zobrazovat data ktore natecu cez UDP protokol ktory musi byt v nekonecnom cykle kedze neviem kedy tieto packety pridu...
                kazdopadne malo to byt nieco v tom zmysle ze v php.exe (musim robit na windowse) bezi ten nekonecny cyklus ktory prijima packety (nick a data) a rozposiela ich online uzivatelom do prehliadaca kdekolvek po sieti... a prave na ten rozvoz dat by som potreboval soap aby klient dostal data co najskor od prijatia packetu UDPckom v php.exe... je to vobec mozne spravit cez SOAP alebo ako to inac spravit?
                • Re: SOAP servis 13.07.2010 | 15:11
                  jimik   Návštevník
                  neviem, nic podobne som nerobil. tusim, ze soap na to netreba, aj tak je to stary zmatok. skor by som popozeral AJAX, JSON
                  • Re: SOAP servis 14.07.2010 | 10:52
                    Nickname   Návštevník
                    napadlo ma nieco ako to riesit prave cez SOAP len teraz neviem ako do wsdl pridat dalsiu funkciu
                    server1.php
                    <?php
                    $a=5;

                    function putCatalogEntry() {
                    global $a;
                    return $a;
                    }
                    function getCatalogEntry($dat){
                    global $a;
                    $a = $a.$dat;
                    return $a;
                    }
                    ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache
                    $server = new SoapServer("catalog.wsdl");
                    $server->addFunction("getCatalogEntry");
                    $server->handle();
                    ?>

                    catalog.wsdl
                    <?xml version ='1.0' encoding ='UTF-8' ?>
                    <definitions name='Catalog'
                    targetNamespace='http://example.org/catalog'
                    xmlns:tns=' http://example.org/catalog '
                    xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'
                    xmlns:xsd='http://www.w3.org/2001/XMLSchema'
                    xmlns:soapenc='http://schemas.xmlsoap.org/soap/
                    encoding/'
                    xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'
                    xmlns='http://schemas.xmlsoap.org/wsdl/'>

                    <message name='getCatalogRequest'>
                    <part name='catalogId' type='xsd:string'/>
                    </message>
                    <message name='getCatalogResponse'>
                    <part name='Result' type='xsd:string'/>
                    </message>

                    <portType name='CatalogPortType'>
                    <operation name='getCatalogEntry'>
                    <input message='tns:getCatalogRequest'/>
                    <output message='tns:getCatalogResponse'/>
                    </operation>
                    </portType>

                    <binding name='CatalogBinding' type='tns:CatalogPortType'>
                    <soap:binding style='rpc'
                    transport='http://schemas.xmlsoap.org/soap/http'/>
                    <operation name='getCatalogEntry'>
                    <soap:operation soapAction='urn:localhost-catalog#getCatalogEntry'/>
                    <input>
                    <soap:body use='encoded' namespace=
                    'urn:localhost-catalog'
                    encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
                    </input>
                    <output>
                    <soap:body use='encoded' namespace='urn:localhost-catalog' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
                    </output>

                    </operation>
                    </binding>

                    <service name='CatalogService'>
                    <port name='CatalogPort' binding='CatalogBinding'>
                    <soap:address location='http://localhost/server1.php'/>
                    </port>
                    </service>
                    </definitions>

                    nieco som uz skusal ale nevyslo to... potrebujem spravit aby SOAP bral aj funkciu getCatalogEntry aj putCatalogEntry

                    vdaka
                    • Re: SOAP servis 14.07.2010 | 11:40
                      Nickname   Návštevník
                      To wsdl som uz vyriesil, avsak chcem sa spytat mam client1.php ktory tlaci na SOAP data client2.php ktory by mal tieto data preberat a server1.php kde by sa tieto data mali ukladat ale da sa to nejak zosynchronizovat aby ked pridu data cez put() ostali tam az dokym sa nezavola get()?
                      client1
                      <?php
                      $client = new
                      SoapClient(
                      "catalog.wsdl"
                      );

                      print($client->putCatalogEntry("abc798654"));
                      ?>
                      client2
                      <?php
                      $adder = new
                      SoapClient(
                      "catalog.wsdl"
                      );

                      //$adder->getCatalogEntry("sth");
                      echo $adder->getCatalogEntry();
                      ?>
                      server1
                      <?php
                      $a=5;
                      //client1.php put
                      //client2.php get
                      function putCatalogEntry($dat){
                      global $a;
                      $a = $a.$dat;
                      return $a;
                      }
                      function getCatalogEntry() {
                      global $a;
                      return $a;
                      }
                      ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache
                      $server = new SoapServer("catalog.wsdl");
                      $server->addFunction("getCatalogEntry");
                      $server->addFunction("putCatalogEntry");
                      $server->handle();
                      ?>
                      • Re: SOAP servis 14.07.2010 | 14:38
                        jimik   Návštevník
                        niekam ulozit - subor alebo databaza - a potom odtial citat.
                        • Re: SOAP servis 14.07.2010 | 14:53
                          Nickname   Návštevník
                          presne preto som pisal v prvom prispevku ze to ukladat nemozem... Nemam dovolene ukladat do databazy od zaujemcu preotze je to riesene teraz tak a su tam velkde dopyty zapis - vypis tak sa stavalo ze databaza bola locknuta a boli dlhe odozvy na cakanie :P preto by som potreboval "nieco" co by si tu premennu pamatalo a dokazalo by ju zobrazovat u klienta myslel som ze to spravi SOAP ale zrejme nespravi
                  • Re: SOAP servis 14.07.2010 | 13:14
                    XMen   Návštevník
                    Tak to ti gratulujem, JSON je zasa novy zmatok. fuj fuj fuj