Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1422 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Question PHP, PEAR SOAP, Dotnet et sérialisation

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Question PHP, PEAR SOAP, Dotnet et sérialisation

n°1564242
bubur
Posté le 23-05-2007 à 19:11:22  profilanswer
 

Bonjour,
 
J'ai actuellement un ensemble de webservices dotnet que je consomme en php via la librairie PEAR SOAP.
 
Un de mes webservices: GetInfo() prend en entrée un objet. J'utilise, pour appeler le webservice, la méthode SOAP_WSDL:
 
 
$wsdl = new SOAP_WSDL('http://xxxxxxxx/service.asmx?wsdl', $proxy);
$Client = $wsdl->getProxy();
 
 
$objRetour = $Client->GetInfo($location);
 
mon objet "location" etant une classe contenant des types simples:
 
  class location
  {
    var $city;
    var $zipCode;
  }
 
et l'equivalent coté dotnet:
 public class Location
 {
  private string _strCity;
  private int _intZipCode;
  private bool _blnZipCodeSpecified = false;
 
  public Location()
  {
  }
 
  [XmlElement("city" )]
  public string City
  {
   get  
   { return  this._strCity; }
   set  
   { this._strCity = value; }
  }
 
  [XmlElement("zipCode" )]
  public int ZipCode
  {
   get  
   { return  this._intZipCode; }
   set  
   { this._intZipCode = value; }
  }
 
  [XmlIgnoreAttribute()]
  public bool ZipCodeSpecified
  {
   get  
   { return  this._blnZipCodeSpecified; }
   set  
   { this._blnZipCodeSpecified = value; }
  }
 }
 
Je ne peux pas, en php, typer les variables.
 
Si ma variable zipCode n'est pas remplie dans l'objet lors de son instanciation:
 
1. si je consomme mon webservice depuis dotnet, le fait d'avoir créé un attribut ZipCodeSpecified et de le mettre à false n'inclut pas la variable ZipCode dans le message soap.
 
2. Par contre, si je consomme le webservice depuis PHP, comme PHP ne type pas les variables lors de la déclaration, dans le message soap, la variable est inclue et contient une chaine vide, ce qui, a l'appel du webservice, crée une erreur puisque le type attendu par dotnet est un entier.
 
Ma question est donc la suivante: existe t-il un mécanisme (comme en dotnet) pour forcer php ou PEAR à ne pas inclure les variables qui n'ont pas été affectées sachant que je n'ai pas envie de construire mon xml manuellement et que je veux utiliser la méthode SOAP_WSDL?
 
J'espère avoir été assez clair dans mes explications. Merci d'avance pour vos réponses.
 
Yannick

mood
Publicité
Posté le 23-05-2007 à 19:11:22  profilanswer
 

n°1568907
Gagman
Héritier du vide
Posté le 02-06-2007 à 10:24:13  profilanswer
 

Je fais la même chose sauf que je n'ai pas fait de classe coté PHP
$param->$city = 'Paris';  
$param->$zipCode = '75012';
 
$objRetour = $Client->GetInfo($param);
Ca fait un objet par défaut qui passe bien au dotnet.
il est typé par ta classe dotnet.
 
 
Moi j'ai du passer par une classe proxy interne au WS car la couche d'accés aux données est spécifique.
 
Je n'utilise pas   [XmlElement("champ" )]  [XmlIgnoreAttribute()] car même si c'est envellopé dans du XML pour la question et la réponse, l'exploitation de l'objet ne se fait que si c'est sérializable. (Me rappele plus de la balise à mettre en tête de classe)
 
On a réussi a passer des objets contenant des collections comme ca.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Question PHP, PEAR SOAP, Dotnet et sérialisation

 

Sujets relatifs
[J2EE] Question généraleQuestion sur les listbox vba excel
[PHP] Faire un panier (site marchand)[PHP] Petit jeu...
[PHP] Probleme connexion FTPExecuter un programme en C via PHP
[PHP] problème d'écriture dans un fichier[PHP] Recherche Freelance
Editeur PHP[PHP] Imbrication de méthodes dans une class
Plus de sujets relatifs à : Question PHP, PEAR SOAP, Dotnet et sérialisation


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR