Semplice php client e web service scritto in c# non funzionanti

marcomangiante

Nuovo Utente
28 Dic 2007
4
0
0
Salve a tutti,

sono un principiante e sto cercando di creare un client di esempio in php (php 5.2.5 con estensioni soap abilitate) per due piccoli web services in c# che ho scritto: spero di essere abbastanza esaustivo nello scrivere quello che succede.

Sto usando Windows Vista Ultimate con IIS 7; tutti i file vengono salvati in wwwroot.

Per prima cosa, ho creato il web service in c# (il codice restituisce semplicemente un numero casuale tra 1 e 90), salvandolo come file randomnumber.asmx:

Codice:
<%@ WebService Language="C#" class="RandomNumberService" %>
using System;
using System.Web.Services;

[WebService(Namespace="http://localhost")]

class RandomNumberService {
[WebMethod] public int getRandomNumber() {
// Create a new random class      
Random RandomClass = new Random();
// Obtain a random integer in a range between 1 and 90
int RandomNumber = RandomClass.Next(1,90);
return (RandomNumber);
}
}

Dopo questo, ho aperto il file in internet explorer 7 tramite http://localhost/randomnumber.asmx, controllato che funzionasse sempre nel browser e da qui ho anche ricavato il corrispondente wsdl, salvandolo sempre nella root di IIS.

Dopo fatto ciò, ho scritto un semplice web client in php, simplerandomnumbertest:

PHP:
<?php
   $client = new SoapClient("http://localhost/randomnumber.wsdl");
   $result = $client->getRandomNumber();
   echo("Random number is: " . $return);
?>


L'ho eseguito ma mi dava come errore "Cannot convert type 'int' to 'string'".
Ho provato convertendo nel codice c# l'int in string, rinominando anche il file come randomnumberstr.asmx
Il nuovo codice era:

Codice:
<%@ WebService Language="C#" class="RandomNumberService" %>
using System;
using System.Web.Services;

[WebService(Namespace="http://localhost")]

class RandomNumberService {
[WebMethod] public string getRandomNumber() {
// Create a new random class      
Random RandomClass = new Random();
// Obtain a random integer in a range between 1 and 90
int RandomNumber = RandomClass.Next(1,90);
string strRandomNumber = RandomNumber.ToString();
return (strRandomNumber);
}
}

Ho ovviamente di nuovo ricavato il file wsdl e praticamente nel client php ho riscritto solo la riga:

PHP:
$client = new SoapClient("http://localhost/randomnumberstr.wsdl");

A questo punto ho ottenuto l'errore:

"Catchable fatal error: Object of class stdClass could not be converted to string in (path/del/file/client/php) line 5".

Dopo vari altri e non proficui esperimenti, ho inserito, nel client, al posto della linea di codice

PHP:
echo("Random number is: " . $return);

la linea:

PHP:
print_r($result);

che mi restituiva il risultato corretto insieme ad altri parametri, ad esempio:

HTML:
stdClass Object ( [getRandomNumberResult] => 45 )


A questo punto, ho deciso per curiosità, di scrivere un semplice web service sempre in c# che, passando due numeri, mi restituisse la loro somma.
Ho chiamato il web service add.amsx (da cui ho ricavato poi il relativo file wsdl):

Codice:
<%@ WebService Language="C#" class="AddService" %>
using System;
using System.Web.Services;

[WebService(Namespace="http://localhost")]

class AddService {
[WebMethod] public int add(int left, int right) {
return (left+right);
}
}

e il client simpleaddclient.php:

PHP:
<?php
   $client = new SoapClient("http://localhost/add.wsdl");
   $result = $client->add(5,7);
   print_r($result); 
?>

Ho testato il web service senza client nel browser e funzionava, una volta invece che lo testavo con il client il risulato era:

HTML:
stdClass Object ( [addResult] => 0 )


La cosa curiosa, oltre al fatto che restituisce 0 ovviamente, è che se riprovo il primo web service scritto con il realtivo php client (quello con echo e non con print_r), ottengo non più l'errore segnalato prima, bensì la stringa:

HTML:
Random number is:

senza quindi nessun valore, ma neanche senza l'errore "catchable....."

A questo punto, se c'è qualcuno che mi potesse dare una mano sarebbe veramente ben accetto.
Praticamente se sapessi come trattare l'oggetto che viene restituito al client nella riga
PHP:
$result = $client->getRandomNumber();
, credo che avrei risolto almeno il primo problema.
Il secondo problema è perché il secondo client restituisce somma 0, invece della somma corretta.

Ogni aiuto è grandemente apprezzato.

--
Saluti,

Marco Mangiante
 

Discussioni simili