-
Namespace et balises xml
Bonjour à tous.
J'ai un petit souci, dans le cadre d'un stage, je dois écrire un web service ("mon_lala")censé être la copie conforme d'un web service existant "lala", je dispose pour faire cela du wsdl de lala et de captures de trames réalisés avec Wireshark qui m'ont permis de reconstituer les messages soap échangés. Je dispose d'un programme de test lalatest pour tester les deux web services et vérifier "mon_lala" respecte scrupuleusement le même schéma que "lala".
Le souci c'est que j'ai des différences au niveau des namespaces et des balises xml, je m'explique:
-voici à quoi ressemble le message soap retourné par lala:
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ns1="http://toto.com/webservices/">
<SOAP-ENV:Body>
<ns1:lalaResponse>
<ns1:result>ok</ns1:result>
<ns1:informations>
<ns1:values>
<ns1:age>7</ns1:age>
<ns1:tel>123456</ns1:tel>
etc...
-voici le message soap retourné par mon_lala:
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<lalaResponse xmlns="http://toto.com/webservices/">
<result>ok</result>
<informations>
<values>
<age>7</age>
<tel>123456</tel>
etc....
mes balises ne commencent pas par "ns1", paramètre qui semble être défini par la ligne xmlns:ns1="http://toto.com/webservices/" de lala, malheureusement apres de nombreuses recherches je n'ai pas compris comment faire apparaitre cela dans mon code.
Si quelqu'un sait comment modifier les dclarations de xmlns qui me permettrait de faire apparaitre ce fameux ns1 dans mes balises xml, ca m'aiderait beaucoup
Merci d'avance
-
Erratum
Dans les lignes où apparaissent les smileys il faut lire "xmlns : xs...."
-
Pour spécifier le namespace de tes balises , il faut que tu regardes du coté des propriétés de sérialization
exemple, pour ta propriété <ns1:result>string</result>
il faut que tu la déclare ds ton code comme ceci
[XmlAttribute namespace="ns1"]
String result;
je n'ai pas de code sous les yeux donc vérifies la syntaxe, mais le principe est la.
N'hésites pas si tu as des questions
-
Merci de ton aide mais je n'ai pas trouvé comment utiliser le [XmlAttribute namespace="ns1"]
Le truc c'est qu'il faut que je me débrouille pour avoir la ligne
xmlns:ns1="http://toto.com/webservices/"
dans le message SOAP retourné par ma méthode, je vous copie le code de mon Web Service:
using System;
using System.Diagnostics;
using System.Web;
using System.ComponentModel;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Runtime.Remoting;
using System.Runtime.Serialization;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
using System.Xml.Serialization;
using System.Xml;
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.1433")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name = "WSSoap", Namespace = "http://toto.com/webservices/")]
public partial class WS : System.Web.Services.Protocols.SoapHttpClientProtocol
{
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://toto.com/webservices/evtReadDictionaryVersion", RequestNamespace = "http://toto.com/webservices/", ResponseNamespace = "http://toto.com/webservices/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
[return: System.Xml.Serialization.XmlElementAttribute("result")]
[WebMethod]
public ResultType lala([System.Xml.Serialization.XmlArrayItemAttribute("values", IsNullable = false)] out informations[] infos)
{
infos = new informations[1];
infos[0] = new informations();
infos[0].age = 7;
infos[0].tel = 50330;
return ResultType.ok;
}
}
Voilà je sais pas si cela va vous aider, tous les lignes du type [System.xml...] proviennent du code autogénéré à partir du fichier wsdl.
Je ne suis pas un expert en Web Services, je ne comprend donc pas l'utilité de toutes ces lignes et ne sais pas comment modifier un paramètre pour faire apparaitre le "ns1"...
Merci d'avance pour ceux qui tenteront de m'aider
Bonne journée