Probleme Webservice serialisation AXIS --> Client .Net C#

Probleme Webservice serialisation AXIS --> Client .Net C# - C#/.NET managed - Programmation

Marsh Posté le 31-07-2007 à 12:12:14    

Bonjour à tous,
Je doit consommer, dans une page asp .net en c#, un webservice java (AXIS) qui propose plusieurs méthodes demandant en paramètre et retournant en réponse, des objets complexes, issue du wsdl de ce webservice.
 
J'utilise visual studio 2005, j'ai donc intégrer ce webservice et créant une classe avec le programme wsdl.exe. Je retrouve dans la classe générée les objets et les méthodes proposées par ce webservice.
 
Une des méthodes ne demande pas de paramètre et retourne un entier, j'arrive à recevoir une réponse correcte, donc les échanges fonctionnent.
 
En revanche les autres méthodes qui demandent et retournent des paramètres de type complexe, ne fonctionnent pas.
 
En fait, il n'y a pas d'erreur de générée, mais l'objet retourné est instancié mais ces variables ne sont pas affectées.
 
Voici le lien du webservice utilisé, la méthode sur laquelle je fais mes essais est getPegasusVersionInfo() :
http://cattest.tecdoc.net/pegasus- [...] CatWL?wsdl
 
le code appelant la méthode :

Code :
  1. TecdocToCatSkeletonService t = new TecdocToCatSkeletonService();
  2.        VersionInfoRequest p = new VersionInfoRequest();
  3.        p.provider = -1;
  4.        VersionInfoResponse resp = t.getPegasusVersionInfo(p);


 
Voici mes objets :
 

Code :
  1. //Objet en entrée
  2. [System.SerializableAttribute()]
  3. [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://datatype.cat.tecdoc.net" )]
  4. public partial class VersionInfoRequest : VersionInfoRequestSrc {
  5.    
  6.     private int providerField;
  7.    
  8.     /// <remarks/>
  9.     public int provider {
  10.         get {
  11.             return this.providerField;
  12.         }
  13.         set {
  14.             this.providerField = value;
  15.         }
  16.     }
  17. }
  18. //Objet en sortie
  19. [System.SerializableAttribute()]
  20. [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://datatype.cat.tecdoc.net" )]
  21. public partial class VersionInfoResponse {
  22.    
  23.     private int buildField;
  24.    
  25.     private string dateField;
  26.    
  27.     private int majorField;
  28.    
  29.     private int minorField;
  30.    
  31.     private int revisionField;
  32.    
  33.     private int statusField;
  34.    
  35.     private string statusTextField;
  36.    
  37.     /// <remarks/>
  38.     public int build {
  39.         get {
  40.             return this.buildField;
  41.         }
  42.         set {
  43.             this.buildField = value;
  44.         }
  45.     }
  46.    
  47.     /// <remarks/>
  48.     [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
  49.     public string date {
  50.         get {
  51.             return this.dateField;
  52.         }
  53.         set {
  54.             this.dateField = value;
  55.         }
  56.     }
  57.    
  58.     /// <remarks/>
  59.     public int major {
  60.         get {
  61.             return this.majorField;
  62.         }
  63.         set {
  64.             this.majorField = value;
  65.         }
  66.     }
  67.    
  68.     /// <remarks/>
  69.     public int minor {
  70.         get {
  71.             return this.minorField;
  72.         }
  73.         set {
  74.             this.minorField = value;
  75.         }
  76.     }
  77.    
  78.     /// <remarks/>
  79.     public int revision {
  80.         get {
  81.             return this.revisionField;
  82.         }
  83.         set {
  84.             this.revisionField = value;
  85.         }
  86.     }
  87.    
  88.     /// <remarks/>
  89.     public int status {
  90.         get {
  91.             return this.statusField;
  92.         }
  93.         set {
  94.             this.statusField = value;
  95.         }
  96.     }
  97.    
  98.     /// <remarks/>
  99.     [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
  100.     public string statusText {
  101.         get {
  102.             return this.statusTextField;
  103.         }
  104.         set {
  105.             this.statusTextField = value;
  106.         }
  107.     }
  108. }
  109. //Methode appellée
  110.     [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestNamespace="urn:axis.server.cat.tecdoc.net", ResponseNamespace="urn:axis.server.cat.tecdoc.net", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
  111.     [return: System.Xml.Serialization.XmlElementAttribute("getPegasusVersionInfoReturn",Form = System.Xml.Schema.XmlSchemaForm.Unqualified,IsNullable=true, Type=typeof( VersionInfoResponse) )]
  112.     public VersionInfoResponse getPegasusVersionInfo(VersionInfoRequest in0)
  113.     {
  114.         try
  115.         {
  116.             object[] results = this.Invoke("getPegasusVersionInfo", new object[] { in0 });
  117.             return (VersionInfoResponse)results[0];
  118.         }
  119.         catch (Exception e)
  120.         {
  121.             throw new Exception();
  122.         }
  123.     }


 
 
Merci pour votre aide.


Message édité par STARIS79 le 01-08-2007 à 09:14:02
Reply

Marsh Posté le 31-07-2007 à 12:12:14   

Reply

Marsh Posté le 31-07-2007 à 21:47:50    

déjà pas besoin d'utiliser wsdl.exe
 
tu créer une WebRéférence et il créara tout pour toi. Essaye déjà comme cela.
moi perso, je n'ai jamais eu de prob avec les objets complexes entre AXIS et .NET.
Maintenant, si ça passe coté java, ça doit arrivé normalement sans trop de problème coté .NET...  
 
Sinon, va faloir faire une désérialisation manuelle en implémentant l'interface ISerializable

Reply

Marsh Posté le 01-08-2007 à 09:13:39    

J'ai besoin de wsdl.exe car en intégrant le webservice et tant que référence web, ces méthodes me retournent un objet ayant la valeur null (J'étais parti sur cela aussi au début). En l'implémentant dans une classe, j'ai la possibilité de modifier quelques valeurs pour avancer.
 
Les résultats de cette recherche sont les suivantes :
 
- Les méthodes issues de la classe générée me retournait la même valeur null, en ajoutant "Form = System.Xml.Schema.XmlSchemaForm.Unqualified", cela m'instancie un objet mais les valeurs ne sont pas affectées.
 
- Sur les rares forums parlant du sujet il 'agirait d'un problème de namespace, j'ai essayé plein de combinaison sans succès.  
 
- Si je retourne le type objet au lieu de VersionInfoResponse, je reçoit un tableau de xmlnodes, chacun contenant les valeurs des variables à affecter. Je reçois donc bien une réponse du web service, mais la sérialisation pose problème.
 
Le wsdl est à votre diposition si vous voulez faire des essais :  
 
http://cattest.tecdoc.net/pegasus- [...] CatWL?wsdl
 
Merci.

Reply

Marsh Posté le 01-08-2007 à 21:23:10    

tu pourrais poster la classe que tu tentes de passer sur le réseau? (ton code java, ou tu code C++). Enfin, l'objet que tu envoie depuis ton WebService. Le code de celui-ci.
 
De plus, ton WS, il est écrit en quoi? tu génères ton WSDL avec quoi? etc...


Message édité par moi23372 le 01-08-2007 à 21:28:42
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed