Domanda

Ho lavorato su uno script con PHP4 che si basa su NuSOAP. Ora sto provando a spostarlo su PHP5 e ad usare lì il supporto buildin per SOAP.

$wsdlPath = "";    // I have obviously set these variables to something meaningful, just hidden for the sake of security
$apiPath = "";
$username = "";
$password = "";

// PHP5 style
$client = new soapclient($wsdlPath, array('login'=>username,                
'password'=> $password,
'soap_version'=> SOAP_1_2,
'location'=> $apiPath,
 'trace'=> 1));

// PHP4/NuSOAP style
$client = new soapclient($wsdlPath, true);  
client->setEndpoint($apiPath);                          
$client->setCredentials($username, $password);
$client ->loadWSD);

La versione di PHP5 genera la seguente eccezione stacktrace:

EXCEPTION=SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://external-nbb.napi.norwegian.no.stage.osl.basefarm.net/api/napi1300?wsdl' in /home/eisebfog/public_html/database/norwegian.php:31
Stack trace:
#0 /home/eisebfog/public_html/database/norwegian.php(31): SoapClient->SoapClient('http://external...', Array)
#1 /home/eisebfog/public_html/database/index.php(53): require_once('/home/eisebfog/...')
#2 {main}

Ora, poiché la versione NuSOAP funziona e il puro PHP5 non funziona, non ci vuole un chirurgo cerebrale per capire che sto facendo qualcosa di sbagliato. Ho accesso al file .htaccess e tramite phpinfo () mi sono assicurato di eseguire NuSOAP correttamente e di eseguire PHP5 quando avrei dovuto, e PHP4 / Nusoap quando avrei dovuto.

Fondamentalmente, non sono molto bravo con i servizi web e soap - ma se qualcuno ha qualche idea, apprezzerei qualsiasi input su ciò che sto facendo di sbagliato e su come posso passare al soap nativo in PHP5. A proposito, la risonanza che voglio questa mossa in primo luogo è il presunto risparmio di risorse nel sapone nativo. Gradirei qualsiasi collegamento ai parametri di riferimento tra queste due soluzioni.

È stato utile?

Soluzione

Assicurati che NuSoap e PHPv5-SOAP siano in esecuzione sullo stesso server. Se non sbaglio totalmente, entrambe le librerie usano lo stesso nome di classe. Forse funzionerà meglio se ti assicuri che nessun file NuSopa sia incluso? E verifica anche che la libreria SOAP sia caricata:

if(!extension_loaded('soap')){
  dl('soap.so'); // Actually a deprecated method. See "notes" at http://no.php.net/dl
}

Suppongo che il campo versione a cui ti riferisci sia definito come "SOAP 1.1" o simile?

I migliori auguri :)

A proposito: a cosa stai lavorando? Scambio di ritardi dal pilota all'aeroporto? O forse un servizio web che ridurrà i tempi di attesa per la consegna dei bagagli a Osl? : P

Altri suggerimenti

Abbiamo avuto problemi molto simili con il client SOAP incorporato PHP5 che cercava di utilizzare un servizio Web basato su .NET. Anche l'analisi WSDL non è riuscita a segnalare uno schema non valido. Inserire le definizioni dello schema in un singolo file locale non ha aiutato.

Abbiamo smesso di provare e siamo passati a NuSOAP, che ha funzionato.

Tuttavia, NuSOAP è tutt'altro che perfetto. In questo momento mi trovo in una situazione di memoria insufficiente durante l'analisi di risposte da 1 MB +. La cancellazione di tutto il brutto codice di debug ha aiutato un po ', ma non radicalmente.

Quindi, al momento sembra che non ci sia alcuna implementazione client SOAP interoperabile / funzionale al 100% in PHP al momento.

Senza testarlo, ho due suggerimenti:

Innanzitutto, imposta il tuo error_reporting al massimo livello possibile (prima di creare SoapClient):

error_reporting( E_ALL );

Se c'è qualcosa di sbagliato nell'autenticazione sul lato server, PHP emetterà degli avvisi. Nella maggior parte dei casi, ti dirà cosa è andato storto.

Secondo: non so se è possibile specificare l'opzione 'location' insieme a un URL a un wsdl. Teoricamente, il wsdl dice al tuo cliente dove si trova l'endpoint delle operazioni, quindi non devi preoccuparti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top