Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    PHP 5 e Webservice: non funziona!

    Ciao a tutti, ho creato un webservice di prova con Visual Web Developer Express, di cui riporto il codice:

    codice:
    using System;
    using System.Web;
    using System.Web.Services;
    using System.Web.Services.Protocols;
    
    [WebService(Namespace = "http://qmatteoq.altervista.org", Description = "Servizio per la moltiplicazione per 2 di un numero")]
    
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class Service : System.Web.Services.WebService
    {
        public Service () {
    
            //Rimuovere il commento dalla riga seguente se si utilizzano componenti progettati 
            //InitializeComponent(); 
        }
    
        [WebMethod]
        public string HelloWorld() {
            return "Hello World";
        }
    
        [WebMethod(Description="Metodo di moltiplicazione per 2")]
        public double Moltiplica(double numero)
        {
            return numero * 2;
        }
        
    }
    L'ho utilizzato in una pagina ASP.NET e in un software scritto in C# e funziona benissimo. Non riesco però ad utilizzarlo con PHP5. Ecco il codice della mia pagina PHP:

    codice:
    	<?php
    		$client=new SoapClient('http://localhost:2288/WebService/Service.asmx?WSDL');
    		$numero=5;
    		$return = $client->Moltiplica($numero);
    		print $return;
    	?>
    Il problema è che come risultato ottengo la criptica stringa "Object ID #2". Ho provato a sostituire nel codice PHP il mio Web Service con un altro e funziona. Cosa c'è che non va nel mio?
    Matteo "QMatteo" Pagani

  2. #2
    Aggiornamento: questa è l'eccezione che ottengo come errore:

    codice:
    SoapFault exception: [soap:Client] System.Web.Services.Protocols.SoapException: Valore dell'intestazione HTTP non riconosciuto dal server SOAPAction: http://tempuri.org/Moltiplica. in System.Web.Services.Protocols.Soap11ServerProtocolHelper.RouteRequest() in System.Web.Services.Protocols.SoapServerProtocol.RouteRequest(SoapServerMessage message) in System.Web.Services.Protocols.SoapServerProtocol.Initialize() in System.Web.Services.Protocols.ServerProtocol.SetContext(Type type, HttpContext context, HttpRequest request, HttpResponse response) in System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing) in D:\Websites\PHP_WebService\index.php:13 Stack trace: #0 [internal function]: SoapClient->__call('Moltiplica', Array) #1 D:\Websites\PHP_WebService\index.php(13): SoapClient->Moltiplica(5) #2 {main
    Onestamente non capisco dove vada a prendere quel http://tempuri.org/Moltiplica, visto che di quell'url non c'è traccia nel mio WebService... Ho provato quindi a mettere come namespace http://tempuri.org e l'eccezione non si verifica più... Peccato che ottengo come risultato il solito Object Id #2...
    Matteo "QMatteo" Pagani

  3. #3
    Altro tentativo: ho provato ad utilizzare la libreria nusoap. Ecco il codice:

    codice:
    <?php
    	require_once("nusoap.php");
    	$client=new soapclient('http://localhost:2288/WebService/Service.asmx?WSDL',true);
    	$result=$client->call('HelloWorld');
    	print $result;
    ?>
    Stavolta come risultato ottengo un bel

    codice:
    Array
    Qualcuno ci capisce qualcosa?
    Matteo "QMatteo" Pagani

  4. #4
    sì ma perchè dici che è un errore ?!!!
    Codice PHP:
    <?php
        
    require_once("nusoap.php");
        
    $client=new soapclient('http://localhost:2288/WebService/Service.asmx?WSDL',true);
        
    $result=$client->call('HelloWorld');
        echo 
    "<pre>";
            
    print_r($result);
            echo 
    "</pre>";
    ?>

  5. #5

  6. #6
    Grazie mille! Non avevo capito che la variabile risultato era in realtà un array, dove il risultato dell'operazione era nella posizione ['MoltiplicaResult']. Solo una cosa non mi spiego: io eseguo questo codice

    codice:
    $client=new SoapClient('http://localhost:2288/WebService/Service.asmx?WSDL');
    numero=5;
    $return = $client->Moltiplica($numero);
    print_r($return);
    Dalla definizione che vedete nel primo post del WebService, il metodo moltiplica dovrebbe prendere il numero e moltiplicarlo per 2. Invece ottengo uno 0!
    Il metodo HelloWorld funziona invece: ottengo proprio la scritta Hello World come risultato.
    Matteo "QMatteo" Pagani

  7. #7
    Ciao,
    sinceramente credo asmx sia qualcosa relativa ai webservice in aspx ed in ambiente microsoft, quindi su questo purtroppo non so proprio aiutarti

  8. #8
    Si è vero, però in teoria il WebService dovrebbe funzionare in maniera standard con qualsiasi linguaggio grazie a SOAP... Non capisco perchè HelloWorld funzioni mentre Moltiplica no; metodo che tra l'altro in ASP.NET e in C# funziona senza problemi invece...
    Matteo "QMatteo" Pagani

  9. #9
    Mhm il metodo pensandoci forse dovresti chiamarlo con call ?!

    call
    public mixed call(string $operation, [ array $params, string $namespace, string $soapAction, boolean $headers ])

    calls method, returns PHP native type

    Warning: documentation is missing.
    Parameter

    string $operation
    SOAP server URL or path

    array $params = >>array()<<
    array of parameters, can be associative or not

    string $namespace = >>""<<
    optional method namespace

    string $soapAction = >>""<<
    optional SOAPAction value

    boolean $headers = >>false<<
    optional array of soapval objects for headers
    Returns mixed

  10. #10
    Dipende dalla libreria di SOAP che usi... Se usi quella integrata in PHP5, non serve: la sintassi è
    codice:
    $client->nomeMetodo(parametri);
    Il call serve invece se si usa nuSOAP: a questo punto la sintassi diventa
    codice:
    $client->call('NomeMetodo',$param)
    dove $param è un array contenente i parametri richiesti dal metodo.
    Matteo "QMatteo" Pagani

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.