Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

WebService et objet complexe

nairik

Posted 18 July 2007 - 03:23 PM

Bonjour,

Je dois réaliser une partie de stats pour mon site, et les composants de flex sont assez cool.

J'ai reussi a mettre en place un systeme de webService mais je ne comprend pas comment faire pour renvoyer des objets complexe a flex.

Un PieChart necessite apparement un ArrayCollection comme dataProvider, estceque je suis obligé de renvoyé une string depuis mon webService et de reconstruire l'arraycollection par la suite ou ya t-il un autre moyen ?

Merci de votre aide.
Bon dev


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Autres réponses dans ce sujet

Tonic

Posted 18 July 2007 - 03:31 PM

Salut,

pourquoi ne pas utiliser amfphp, qui permet de faire transiter tout type de données, sans se préoccuper de la sérialisation...

nairik

Posted 18 July 2007 - 03:38 PM

Il me semble que amfphp c'est que pour php ...
Je n'ai pas trouver de sollution c# ... mon site est en asp.net

N'y a t-il aucun moyen de passer des objets complexe par webService?

Ce message a été modifié par nairik - 18 July 2007 - 03:40 PM.


Fusion

Posted 18 July 2007 - 03:42 PM

CITATION(nairik @ Jul 18 2007, 05:38 PM) Voir le message
Il me semble que amfphp c'est que pour php ...
Je n'ai pas trouver de sollution c# ... mon site est en asp.net

N'y a t-il aucun moyen de passer des objets complexe par webService?


Si, mais il faut les fabriquer de toutes pièces. A base d'objets simples.
Je tâcherai de retrouver les exemples que j'avais faits à l'époque. Et si tu nous indiquais le lien du WebService en question (si ce n'est pas indiscret) ?

nairik

Posted 18 July 2007 - 04:02 PM

ca serait super ...

Ca parait bete mais le seul moyen plus ou moin simple que j'ai trouver pour passer les infos de mon site a flex c'est le webService.
Donc au sein de mon application asp.net j'expose un webService, cependant il n'est pas encore en production...

En gros il renvoit une string de la forme : NomPays1+" "+Nbre+" "+NomPays2+" "+Nbre+ ...

J'ai plus qu'a transformer ca en ArrayCollection. Je cherche smile.gif

Fusion

Posted 18 July 2007 - 05:00 PM

Pour découper la String utilise les méthodes splice() et split() (http://livedocs.adob...ng.html#slice() pour slice et split juste en dessus)

Ensuite pour construire le ArrayCollection tu le remplis avec addItem. J'ai bien des exemples mais ils ne sont pas à moi et ils sont bien compliqués aussi.

Des exemples plus tard, peut-être...

Fusion

Posted 18 July 2007 - 09:45 PM

A la limite, aurais-tu le schéma XML du Web Service dont tu te serviras plus tard?

nairik

Posted 19 July 2007 - 07:40 AM

Oui voila mais je ne comprend pas a quoi cela peut servir ....
Le but serait de pouvoir passer un objet pays, qui posséde deux attributs : nom et nombre. Si j'arrive a faire ca j'arriverai a faire le reste wink.gif

MErci bcp de ton aide en tout cas



Action Script


<?xml version="1.0" encoding="utf-8" ?>
- <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://tempuri.org/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
- <wsdl:types>
- <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
- <s:element name="HelloWorld">
- <s:complexType>
- <s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="toto" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
- <s:element name="HelloWorldResponse">
- <s:complexType>
- <s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="HelloWorldResult" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
- <s:element name="GetPaysByName">
<s:complexType />
</s:element>
- <s:element name="GetPaysByNameResponse">
- <s:complexType>
- <s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="GetPaysByNameResult" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
</s:schema>
</wsdl:types>
- <wsdl:message name="HelloWorldSoapIn">
<wsdl:part name="parameters" element="tns:HelloWorld" />
</wsdl:message>
- <wsdl:message name="HelloWorldSoapOut">
<wsdl:part name="parameters" element="tns:HelloWorldResponse" />
</wsdl:message>
- <wsdl:message name="GetPaysByNameSoapIn">
<wsdl:part name="parameters" element="tns:GetPaysByName" />
</wsdl:message>
- <wsdl:message name="GetPaysByNameSoapOut">
<wsdl:part name="parameters" element="tns:GetPaysByNameResponse" />
</wsdl:message>
- <wsdl:portType name="DatasFromExcelSoap">
- <wsdl:operation name="HelloWorld">
<wsdl:input message="tns:HelloWorldSoapIn" />
<wsdl:output message="tns:HelloWorldSoapOut" />
</wsdl:operation>
- <wsdl:operation name="GetPaysByName">
<wsdl:input message="tns:GetPaysByNameSoapIn" />
<wsdl:output message="tns:GetPaysByNameSoapOut" />
</wsdl:operation>
</wsdl:portType>
- <wsdl:binding name="DatasFromExcelSoap" type="tns:DatasFromExcelSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
- <wsdl:operation name="HelloWorld">
<soap:operation soapAction="http://tempuri.org/HelloWorld" style="document" />
- <wsdl:input>
<soap:body use="literal" />
</wsdl:input>
- <wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
- <wsdl:operation name="GetPaysByName">
<soap:operation soapAction="http://tempuri.org/GetPaysByName" style="document" />
- <wsdl:input>
<soap:body use="literal" />
</wsdl:input>
- <wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
- <wsdl:binding name="DatasFromExcelSoap12" type="tns:DatasFromExcelSoap">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
- <wsdl:operation name="HelloWorld">
<soap12:operation soapAction="http://tempuri.org/HelloWorld" style="document" />
- <wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
- <wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
- <wsdl:operation name="GetPaysByName">
<soap12:operation soapAction="http://tempuri.org/GetPaysByName" style="document" />
- <wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
- <wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
- <wsdl:service name="DatasFromExcel">
- <wsdl:port name="DatasFromExcelSoap" binding="tns:DatasFromExcelSoap">
<soap:address location="http://localhost/ePcLoc/WS/DatasFromExcel.asmx" />
</wsdl:port>
- <wsdl:port name="DatasFromExcelSoap12" binding="tns:DatasFromExcelSoap12">
<soap12:address location="http://localhost/ePcLoc/WS/DatasFromExcel.asmx" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>


Fusion

Posted 19 July 2007 - 08:38 AM

Comme tu l'as vu, j'ai remis en forme le code, le format AS lui va bien icon_smile.gif

Je suis tombé sur ce lien au cours de mes recherches, c'est un exemple assez proche du tien : http://www.brucephil...t-4--WebService

Il a fait en une page ce que je m'acharnais à faire ce matin. Maintenant j'attire ton attention sur cette partie de son code :

Action Script


<mx:WebService
id="WS"
wsdl="http://www.webservicex.net/uszip.asmx?wsdl"
useProxy="false"
fault="alert.show(event.fault.faultString), 'Error'"
showBusyCursor="true" >

<!--specify the WebService method to use-->
<mx:operation name="GetInfoByCity" resultFormat="e4x" >
<!--specify the values for the method parameters-->
<mx:request>
<USCity>
{city.selectedItem.toString()}
</USCity>
</mx:request>
</mx:operation>
</mx:WebService>


C'est lorsque tu définis tes opérations que tu utilises intensivement le schéma XML que je t'avais demandé. L'avantage du SOAP est que c'est très facile de faire communiquer deux Webservices avec ce langage, indépendamment du système d'exploitation, du browser et j'en passe. Mais il faut parler avec les mêmes mots...

Je reviens plus tard avec un exemple adapté à ton cas (enfin, je ne pourrai pas le tester, je suppose qu'il marchera ce sera à toi de me le dire)

Fusion

Posted 19 July 2007 - 09:00 AM

Deux choses :
    - ton code ressemble à une version en français du mien, je crois que ça va bien t'aider
    - je ne vois pas quand est-ce que tu as besoin de passer un objet avec deux string dans ton schéma. Mais je vais en profiter pour te donner un aperçu de ce qui se passe quand les types sont plus complexes

Operation :

Action Script


<operation name="confirmOrder" parameterOrder="idOrder aParams">
<input message="r:OrderInfo"/>
<output message="r:return"/>
</operation>


Message :

Action Script


<message name="OrderInfo">
<part name="idOrder" type="xsd:string"/>
<part name="aParams" nillable="true" type="r:Property"/>
</message>


Définition de Property :

Action Script


<complexType name="Property">
<sequence>
<element name="sName" type="string"/>
<element name="sValue" type="string"/>
</sequence>
</complexType>


Opération associée dans le Webservice :

Action Script


<mx:operation name="confirmOrder" result="confirmO(event)">
<mx:request>

<idOrder>12</idOrder>

<aParams>
<Property>
<sName>prix</sName>
<sValue>50</sValue>
</Property>
</aParams>

</mx:request>
</mx:operation>



Pas si complexe de créer un type complexe... Tu remarqueras l'analogie entre la définition des opérations et messages et la structure de mon <mx:request>. Tu devrais pouvoir t'en sortir maintenant smile.gif

nairik

Posted 19 July 2007 - 09:14 AM

Merci beaucoup, je vais regarder tout ca smile.gif je te donne le feed back quand j'ai reussi a comprendre wink.gif

LAlex

Posted 19 July 2007 - 09:16 AM

Pour info, la salle "Flex Builder" sert à poser des questions sur l'utilisation de l'IDE, pas de Flex... smile.gif

Je déplace wink.gif

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet