2012-05-11 9 views
6

Sto tentando di accedere a un servizio Web (due file di seguito). Il client sta utilizzando ASP.NET/C# per la loro architettura web. Posso aggiungere il riferimento web ma in qualche modo non posso generare una classe proxy per il file wsdl. L'obiettivo è utilizzare la funzione nel file server.php in modo da poter utilizzare xmlstring per visualizzare i dati sul sito Web ASP.NET. Qualsiasi aiuto sarebbe molto apprezzato. Molte grazieASP.NET/C# client per utilizzare un servizio Web PHP/MYSQL (WSDL)


file server.php. Questo file ha una funzione PHP che estrae i dati da un mysql db e la funzione restituisce i dati come una stringa XML.

<?php 
//WEB SERVICE FUNCTION TO EXTRACT DATA FROM CLIENT B INTO XML FORMAT 
function getXML() 
{ 
//CONNECT TO THE DATABASE SERVER 
$dbserverIP = "xxxxxxx"; 
$dbusername = "xxxxxxx"; 
$dbpassword = "xxxxxxx"; 
$dbconnection = mysql_connect($dbserverIP,$dbusername,$dbpassword) 
or die ("The connection to the database server failed."); 

//CONNECT TO THE DATABASE 
$dbname = "xxxxxxxx"; 
$dbselectok = mysql_select_db($dbname,$dbconnection) 
or die ("The connection to the database failed."); 

//QUERY THE DATABASE 
$sqlquery = "SELECT * FROM videogames"; 
$sqlresult = mysql_query($sqlquery,$dbconnection) 
or die ("Error in executing the SQL statement"); 

//CREATE XML STRING 
$xmlstring = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"; 
$xmlstring.= "<videogames>"; 

while ($row = mysql_fetch_array($sqlresult)) 
{ 
    $xmlstring .= "\t<game>\r\n"; 
     $xmlstring .= "\t\t<gametitle>" .$row["gametitle"]. "</gametitle>\r\n"; 
     $xmlstring .= "\t\t<genre>" .$row["genre"]. "</genre>\r\n"; 
     $xmlstring .= "\t\t<year>" .$row["year"]. "</year>\r\n"; 
     $xmlstring .= "\t\t<platform>" .$row["platform"]. "</platform>\r\n"; 
     $xmlstring .= "\t\t<agerating>" .$row["agerating"]. "</agerating>\r\n"; 
     $xmlstring .= "\t\t<price>" .$row["price"]. "</price>\r\n"; 
    $xmlstring .= "\t</game>\r\n"; 
} 

$xmlstring.= "</videogames>"; 

//WRITE XML STRING TO EXTERNAL FILE 
$filename = "videogames.xml"; 
$fileaccessmode = "w"; 
$fptr = fopen($filename,$fileaccessmode); 
fwrite($fptr,$xmlstring); 
fclose($fptr); 

//FREE UP MEMORY 
mysql_free_result($sqlresult); 
mysql_close($dbconnection); 

return $xmlstring; 

} 

//CODE TO DISABLE THE WSDLE CACHE 
ini_set("soap.wsdl_cache_enabled","0"); 

//DEFINE SOAP SERVER INSTANCE AND RELATED WSDL FILE 
//THE service.wsdl FILE IS IN THE SAME FOLDER AS THIS server.php FILE 
$server = new SoapServer("service.wsdl"); 

//ADD FUNCTION TO THE SERVER INSTANCE 
$server->addFunction("getXML"); 

//ACTIVATE THE SOAP HANDLER 
$server->handle(); 

?> 

Questo è il file WSDL collegato al file server.php.

<?xml version ='1.0' encoding ='UTF-8' ?> 

<!-- ====================== DEFINITIONS ====================== --> 

<definitions name="MyWebService" 
    targetNamespace="http://cet-apache-04.cet.bolton.ac.uk/student/mib1bee/CST3017/assignment/scenario1/service.wsdl" 
    xmlns="http://schemas.xmlsoap.org/wsdl/" 
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
    xmlns:tns="http://cet-apache-04.cet.bolton.ac.uk/student/mib1bee/CST3017/assignment/scenario1/service.wsdl" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 

<!-- ====================== TYPES ============================ --> 
<!-- No need for type definitions as only xsd built-in ======= --> 
<!-- data types are used          --> 
<!-- ========================================================= --> 

<!-- ====================== MESSAGE ========================== --> 

<message name="getXML_Request"> 
<part name="input" /> 
</message> 

<message name="getXML_Response"> 
<part name="xmlString" type="xsd:string"/> 
</message> 

<!-- ====================== PORT TYPE ============================ --> 

<portType name="myWebService_PortType"> 

<operation name="getXML"> 
    <input message="tns:getXML_Request"/> 
    <output message="tns:getXML_Response"/> 
</operation> 

</portType> 

<!-- ======================= BINDING ============================= --> 

<binding name="myWebService_Binding" type="tns:myWebService_PortType"> 
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> 

<operation name="getXML"> 
    <input> 
    <soap:body use="literal"/> 
    </input> 
    <output> 
    <soap:body use="literal"/> 
    </output> 
</operation> 

</binding> 

<!-- ======================= SERVICE ============================= --> 

<service name="myWebService_Service"> 
<port name="myWebService_Port" binding="tns:myWebService_Binding"> 
    <soap:address location="http://cet-apache-04.cet.bolton.ac.uk/student/mib1bee/CST3017/assignment/scenario1/server.php"/> 
</port> 
</service> 

</definitions> 
+0

Forse perché non uno specialista in server PHP-sapone, ma mi chiedevo dove il vostro XML viene convertito in un sapone-messaggio, con le sue etichette di sapone molto specifiche. Il tuo WSDL sta dichiarando un servizio di sapone, ma la tua risposta sembra essere un semplice XML. –

+0

Quindi, per capire bene, il client è C# e il server è PHP? O è il contrario? Se stai provando a generare una classe proxy per un client C#, qual è l'errore quando lo fai? – valheru

+1

Hai risolto il problema? –

risposta

0

È necessario risolvere il tuo wsdl:

<operation name="getXML"> 
    <soap:operation soapAction="urn:MyWebService#getXML"/> 
    <input> 
    <soap:body use="literal"/> 
    </input> 
    <output> 
    <soap:body use="literal"/> 
    </output> 
</operation> 

</binding> 
0

In passato ho avuto problemi ottenere .Net per consumare servizi Web creati con wsdl in formato rpc/letterale. Prova invece a convertire il tuo WSDL in formato documento/letterale e dovresti avere più fortuna.