Bonjour
Le résultat d'un de mes appels SOAP est toujours à NULL alors que les données transitent bien sur le réseau.
Je pense que c'est parce que l’élément XML retourné a la particularité de n'avoir que des attributs et aucun sous nœud xml.
En effet pour d'autres méthode SOAP le résultat est correct.
Pourriez vous me donner un coup de main ?
Voici la réponse SOAP transmise par le serveur :
1 2 3 4 5 6 7 8 9 10 11
|
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<context xmlns="urn:zimbra">
<change token="4"/>
</context>
</soap:Header>
<soap:Body>
<CreateAppointmentResponse calItemId="259" rev="4" ms="4" invId="259-258" apptId="259" xmlns="urn:zimbraMail"/>
</soap:Body>
</soap:Envelope> |
Et voici mon code en C# où je cherche à récupérer l'élément XML CreateAppointmentResponse et ses attributs (notamment apptId) définis dans le namespace nommé zimbraMail et a priori correct puisque d'autres méthodes SOAP fonctionnent :
1 2 3 4 5 6 7 8
|
[System.Web.Services.Protocols.SoapHeaderAttribute("contextValue")]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("urn:zimbraMail/CreateAppointmentRequest", ResponseElementName = "CreateAppointmentResponse", RequestNamespace = "urn:zimbraMail", ResponseNamespace = "urn:zimbraMail", ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped, Use = System.Web.Services.Description.SoapBindingUse.Literal)]
[return: System.Xml.Serialization.XmlElementAttribute("CreateAppointmentResponse")]
public CreateAppointmentResponse CreateAppointmentRequest(Msg m) {
object[] results = this.Invoke("CreateAppointmentRequest", new object[] { m });
return ((CreateAppointmentResponse)results[0]);
} |
La variable results de type object[] contient un tableau avec un seul objet à NULL.
object[] results n'est pas NULL mais results[0] est NULL.
Je pense que pour avoir une valeur non NULL et castable en CreateAppointmentResponse il faut affiner la ligne :
[return: System.Xml.Serialization.XmlElementAttribute("CreateAppointmentResponse")]
Qu'en pensez vous ?
J'ai essayé plusieurs alternatives en jouant sur le type de sérialisation XML et le contenu en argument du constructeur, mais sans succès à chaque fois.
Je me demandais également s'il n'existait pas non plus un moyen pour récupérer toute l'enveloppe SOAP au format String.
Victor
Partager