Hola, mi nombre es Jorge.
He leído todos sus comentarios, yo logre hacer webservices con php y ademas puedo ver otros webservices que poseen definicion (?wsdl).
Primero, para crear webservices con php yo utilice
NuSOAP - SOAP Toolkit for PHP. Este archivo lo descargue y lo descomprimí en la raíz de mi sitio web, en este caso "F:\AppServ\www\nusoap". Dentro de la carpeta nusoap yo he creado una nueva carpeta para dejar mis archivos php, a esta carpeta le llame "mis_ejemplos".
Los siguientes codigos los he alojado en esta carpeta recién creada.
operacionesSW.php: Este archivo es el Webservice que posee funciones y es esta misma página la que será llamada en el WebService de Flex Bulider 2.
Código :
<?php
require_once('../lib/nusoap.php');
$ns="urn:Operaciones";
$servidor=new soap_server();
$servidor->configureWSDL('Operaciones', $ns);
$servidor->register('hola',
array('nombre' => 'xsd:string'),
array('return' => 'xsd:string'),
$ns
);
$servidor->register('suma',
array('var1' => 'xsd:string', 'var2' => 'xsd:string'),
array('return' => 'xsd:string'),
$ns
);
$servidor->register('resta',
array('var1' => 'xsd:string', 'var2' => 'xsd:string'),
array('return' => 'xsd:string'),
$ns
);
$servidor->register('multiplicacion',
array('var1' => 'xsd:string', 'var2' => 'xsd:string'),
array('return' => 'xsd:string'),
$ns
);
$servidor->register('division',
array('var1' => 'xsd:string', 'var2' => 'xsd:string'),
array('return' => 'xsd:string'),
$ns
);
function hola($nombre){
return "hola, " . $nombre;
}
function suma($var1,$var2){
$resultado=$var1+$var2;
return $resultado;
}
function resta($var1,$var2){
$resultado=$var1-$var2;
return $resultado;
}
function multiplicacion($var1,$var2){
$resultado=$var1*$var2;
return $resultado;
}
function division($var1,$var2){
$resultado=$var1/$var2;
return $resultado;
}
$HTTP_RAW_POST_DATA= isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$servidor->service($HTTP_RAW_POST_DATA);
?>
ejecutaOperaciones.php: Esta página consume el WebService creado más arriba.
Código :
<?php
require_once('../lib/nusoap.php');
$client = new soapclient('http://localhost/nusoap/mis_ejemplos/operacionesSW.php?wsdl', true);
$result = $client->call('hola', array('nombre' => 'Elena'));
$result .= "<br>";
$result .= $client->call('suma', array('var1' => '4', 'var2' => '6'));
$result .= "<br>";
$result .= $client->call('resta', array('var1' => '4', 'var2' => '6'));
$result .= "<br>";
$result .= $client->call('multiplicacion', array('var1' => '4', 'var2' => '6'));
$result .= "<br>";
$result .= $client->call('division', array('var1' => '4', 'var2' => '6'));
echo '<h2>Resultado</h2>';
echo '<pre>' . print $result . '</pre>';
echo '<h2>Requerimiento</h2>';
echo '<pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
echo '<h2>Respuesta</h2>';
echo '<pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
?>
operaciones_nusoap.mxml: Finalmente llamaremos al archivo OperacionesSW.php dentro de Flex Builder de esta forma:
Código :
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<!-- Define the web service connection (the specified WSDL URL is not functional). -->
<mx:Script>
<![CDATA[
private function ValidarNum2():void
{
if(txNumero2Dividir.text == '0')
{
mx.controls.Alert.show("No puede dividir por 0");
resultadoDividir.text = "No se puedo realizar la división";
}
else
{
Operaciones.division.send();
}
}
]]>
</mx:Script>
<mx:WebService id="Operaciones"
wsdl="http://localhost/nusoap/mis_ejemplos/operacionesSW.php?wsdl" useProxy="false">
<mx:operation name="suma">
<mx:request>
<var1>{txNumero1Suma.text}</var1>
<var2>{txNumero2Suma.text}</var2>
</mx:request>
</mx:operation>
<mx:operation name="resta">
<mx:request>
<var1>{txNumero1Resta.text}</var1>
<var2>{txNumero2Resta.text}</var2>
</mx:request>
</mx:operation>
<mx:operation name="multiplicacion">
<mx:request>
<var1>{txNumero1Multiplicar.text}</var1>
<var2>{txNumero2Multiplicar.text}</var2>
</mx:request>
</mx:operation>
<mx:operation name="division">
<mx:request>
<var1>{txNumero1Dividir.text}</var1>
<var2>{txNumero2Dividir.text}</var2>
</mx:request>
</mx:operation>
</mx:WebService>
<mx:Panel title="Operaciones Matemáticas usando NuSOAP" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" >
<mx:VBox id="box" width="470" verticalGap="0">
<mx:TabBar id="tabBar" direction="horizontal" dataProvider="{viewStack}" width="100%" />
<mx:ViewStack id="viewStack" width="100%" height="100"
backgroundColor="white" borderSides="left bottom right" borderStyle="solid" borderThickness="1">
<mx:Canvas id="child1" label="Sumar">
<mx:VBox>
<mx:HBox>
<mx:Label text="Nº1"/>
<mx:TextInput id="txNumero1Suma" width="200"/>
</mx:HBox>
<mx:HBox>
<mx:Label text="Nº2"/>
<mx:TextInput id="txNumero2Suma" width="200"/>
<mx:Button label="Sumar" click="Operaciones.suma.send()"/>
</mx:HBox>
<mx:Label text="Resultado:" fontWeight="bold"/>
<mx:Label id="resultadoSuma" text="{Operaciones.suma.lastResult}"/>
</mx:VBox>
</mx:Canvas>
<mx:Canvas id="child2" label="Restar">
<mx:VBox>
<mx:HBox>
<mx:Label text="Nº1"/>
<mx:TextInput id="txNumero1Resta" width="200"/>
</mx:HBox>
<mx:HBox>
<mx:Label text="Nº2"/>
<mx:TextInput id="txNumero2Resta" width="200"/>
<mx:Button label="Restar" click="Operaciones.resta.send()"/>
</mx:HBox>
<mx:Label text="Resultado:" fontWeight="bold"/>
<mx:Label id="resultadoRestar" text="{Operaciones.resta.lastResult}"/>
</mx:VBox>
</mx:Canvas>
<mx:Canvas id="child3" label="Multiplicar">
<mx:VBox>
<mx:HBox>
<mx:Label text="Nº1"/>
<mx:TextInput id="txNumero1Multiplicar" width="200"/>
</mx:HBox>
<mx:HBox>
<mx:Label text="Nº2"/>
<mx:TextInput id="txNumero2Multiplicar" width="200"/>
<mx:Button label="Multiplicar" click="Operaciones.multiplicacion.send()"/>
</mx:HBox>
<mx:Label text="Resultado:" fontWeight="bold"/>
<mx:Label id="resultadoMultiplicar" text="{Operaciones.multiplicacion.lastResult}"/>
</mx:VBox>
</mx:Canvas>
<mx:Canvas id="child4" label="Dividir">
<mx:VBox>
<mx:HBox>
<mx:Label text="Nº1"/>
<mx:TextInput id="txNumero1Dividir" width="200"/>
</mx:HBox>
<mx:HBox>
<mx:Label text="Nº2"/>
<mx:TextInput id="txNumero2Dividir" width="200"/>
<mx:Button label="Dividir" click="ValidarNum2()"/>
</mx:HBox>
<mx:Label text="Resultado:" fontWeight="bold"/>
<mx:Label id="resultadoDividir" text="{Operaciones.division.lastResult}"/>
</mx:VBox>
</mx:Canvas>
</mx:ViewStack>
</mx:VBox>
</mx:Panel>
</mx:Application>
Segundo, aqui hay un ejemplo para lo cual ya disponía la siguiente URL:
http://weblogs.macromedia.com/mxna/webservices/mxna2.cfc?wsdlCódigo :
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
creationComplete="wsBlogAggr.getMostPopularPosts.send()">
<mx:WebService id="wsBlogAggr"
wsdl="http://weblogs.macromedia.com/mxna/webservices/mxna2.cfc?wsdl"
useProxy="false">
<mx:operation name="getMostPopularPosts">
<mx:request>
<daysBack>30</daysBack>
<limit>{cbxNumPosts.value}</limit>
</mx:request>
</mx:operation>
</mx:WebService>
<mx:Panel x="10" y="10" width="475" height="400" layout="absolute"
title="Most Popular Posts">
<mx:ComboBox x="30" y="25" id="cbxNumPosts" change="wsBlogAggr.getMostPopularPosts.send()">
<mx:Object label="Top 5" data="5" />
<mx:Object label="Top 10" data="10" />
<mx:Object label="Top 15" data="15" />
</mx:ComboBox>
<mx:DataGrid x="30" y="75" id="dgTopPosts" width="400" dataProvider="{wsBlogAggr.getMostPopularPosts.lastResult}">
<mx:columns>
<mx:DataGridColumn headerText="Top Posts" dataField="postTitle"/>
<mx:DataGridColumn headerText="Clicks" dataField="clicks" width="75"/>
</mx:columns>
</mx:DataGrid>
<mx:LinkButton x="30" y="250"
label="Select an item and click here for full post"/>
</mx:Panel>
</mx:Application>
Espero que les sirva.
Atte.
Jorge Fuentes