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

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  webservice C# et consommation SOAP : problème de namespace

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

webservice C# et consommation SOAP : problème de namespace

n°2027136
lordankou
Posté le 05-10-2010 à 17:30:19  profilanswer
 

Bonjour,
 
J'ai un petit problème dans la construction de mon webservice.
Je dois construire un webservice avec une méthode qui doit consommer la demande SOAP suivante :
 

Code :
  1. <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
  2.     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  4.     <soapenv:Body>
  5.         <GetDefaultInputFieldMapping xmlns="http://www.esri.com/schemas/ArcGIS/9.3"/>
  6.     </soapenv:Body>
  7. </soapenv:Envelope>


 
or mon code :

Code :
  1. [WebMethod(MessageName = "GetDefaultInputFieldMapping", Description = "Procédure privée - ne pas utiliser" )]
  2.         [System.Web.Services.Protocols.SoapDocumentMethod(RequestNamespace = "http://www.esri.com/schemas/ArcGIS/9.3", ResponseNamespace = "http://www.esri.com/schemas/ArcGIS/9.3", ResponseElementName = "GetDefaultInputFieldMappingResponse" )]
  3.         public PropertySet GetDefaultInputFieldMapping()
  4.         {
  5.             try
  6.             {
  7.                 PropertySet resultat = new PropertySet();
  8.                 PropertySetProperty[] resultat_Array = new PropertySetProperty[2];
  9.                 resultat_Array[0] = new PropertySetProperty();
  10.                 resultat_Array[0].Key = "Zone";
  11.                 resultat_Array[0].Value = "Zip, Zipcode, City, Zone";
  12.                 resultat_Array[1] = new PropertySetProperty();
  13.                 resultat_Array[1].Key = "Street";
  14.                 resultat_Array[1].Value = "Address, Addr, Street";
  15.                 resultat.PropertyArray = resultat_Array;
  16.                 return resultat;
  17.             }
  18.             catch (Exception e)
  19.             {
  20.                 // erreur pendant la FindAddressCandidates
  21.                 log.Error(" GetDefaultInputFieldMapping : erreur" );
  22.                 log.Error(" Détail : " + e.Message.ToString());
  23.                 return null;
  24.             }
  25.         }


 
me génére la demande SOAP suivante :
 

Code :
  1. <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">
  2. <SOAP-ENV:Body>
  3.  <m:GetDefaultInputFieldMapping xmlns:m="http://www.esri.com/schemas/ArcGIS/9.3"/>
  4. </SOAP-ENV:Body>
  5. </SOAP-ENV:Envelope>


 
et je ne sais pas du tout comment virer le préfixe m:  pour avoir une balise sans prefixe (ce qui va poser problème dans le programme qui va utiliser ce webservice).
Quelqu'un aurait donc une idée de comment faire pour ne plus avoir le prefixe  ?
Merci d'avance.


---------------

mood
Publicité
Posté le 05-10-2010 à 17:30:19  profilanswer
 

n°2027155
masklinn
í dag viðrar vel til loftárása
Posté le 05-10-2010 à 20:30:15  profilanswer
 

lordankou a écrit :

ce qui va poser problème dans le programme qui va utiliser ce webservice.


Pourquoi, il est con comme un bol et infoutu de comprendre des namespaces XML? Tu réalises que dans ce cas il va pas être capable de bouffer ta requête, parce que tu utilises pas le même alias de namespace pour ton enveloppe soap que dans ton exemple?

lordankou a écrit :

Quelqu'un aurait donc une idée de comment faire pour ne plus avoir le prefixe  ?


Comprendre les namespaces XML serait probablement un bon début.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2027183
lordankou
Posté le 05-10-2010 à 23:03:08  profilanswer
 

masklinn a écrit :


Pourquoi, il est con comme un bol et infoutu de comprendre des namespaces XML? Tu réalises que dans ce cas il va pas être capable de bouffer ta requête, parce que tu utilises pas le même alias de namespace pour ton enveloppe soap que dans ton exemple?


 
je dois considérer en effet que le programme qui va utiliser ce webservice est con comme un bol. Je n'ai strictement aucun controle sur ce qu'il fait avec ce webservice. J'ai juste une trace dans un fichier de log des requêtes et réponse SOAP envoyer au webservice. A moi ensuite de me débrouiller avec ça pour construire un webservice qui génère à l'identique ces requêtes et réponses (sauf 2 paramètres en entrée et 2 en sortie qui sont variables)
 

masklinn a écrit :


Comprendre les namespaces XML serait probablement un bon début.


 
ça je me doute mais je ne sais pas où commencer. je ne peux pas non plus passer trop de temps dessus (le coeur du programme c'est la géolocalisation pas cette partie là mais qui reste néanmoins essentielle). Bref comment faire pour adapter mon webservice en C# pour qu'il génére correctement les bonnes requêtes et réponses SOAP (et donc s'occuper des namespace)


---------------

n°2027218
lordankou
Posté le 06-10-2010 à 10:38:54  profilanswer
 


 
 
en fait mon problème de namespace est double. Je le rencontre à la fois en entrée et en sortie.  
En entrée si je ne prefixe pas mes balises par ce "m:" je n'arrive pas à récupérer les objets passés en paramètre  :(  
 
En sortie j'essaie d'avoir la même structure pour que l'appli cliente ne plante pas. Peut être que l'appli cliente va reconnaitre le namespace sans problème ou peut être que tout sera transformer en chaine de caractère et que l'appli cliente var récupérer le caractère 120 de la chaîne. Je n'ai aucun moyen de le savoir à part de le tester chez le client et d'attendre le fichier de log de la part de ce dernier (et le client a bien sur pas que ça à faire ce que je comprends).  
 
 
en fait pour faire un petit résumé ce que je ne comprends pas c'est pourquoi via le code suivant :
 

Code :
  1. namespace webService_Geolocalisation
  2. {
  3. [WebService(Namespace = "http://www.esri.com/schemas/ArcGIS/9.3" )]
  4. [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
  5.      
  6. [WebMethod(Description = "Procédure privée - ne pas utiliser" )]
  7.         [XmlInclude(typeof(PointN))]
  8.         public ESRI.ArcGIS.ADF.ArcGISServer.RecordSet FindAddressCandidates(PropertySet Address, PropertySet PropMods)
  9.         { 
  10.             …
  11.   }
  12. }


 
il n'est pas capable de récupérer la valeur d'Adresse via la requête :
 

Code :
  1. <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
  2.     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  4.     <soapenv:Body>
  5.         <FindAddressCandidates xmlns="http://www.esri.com/schemas/ArcGIS/9.3">
  6.             <Address xmlns="">
  7.                 <PropertyArray>
  8.                     <PropertySetProperty>
  9.                         <Key>String</Key>
  10.                         <Value/>
  11.                     </PropertySetProperty>
  12.             </Address>
  13.             <PropMods xmlns="">
  14.                 <PropertyArray>
  15.                     <PropertySetProperty>
  16.                         <Key>String</Key>
  17.                         <Value/>
  18.                     </PropertySetProperty>
  19.                 </PropertyArray>
  20.             </PropMods>
  21.         </FindAddressCandidates>
  22.     </soapenv:Body>
  23. </soapenv:Envelope>


 
alors qu'il arrive avec :
 

Code :
  1. <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
  2.     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  4. <soapenv:Body>
  5.  <m:FindAddressCandidates xmlns:m="http://www.esri.com/schemas/ArcGIS/9.3">
  6.   <m:Address>
  7.    <PropertyArray>
  8.     <PropertySetProperty>
  9.      <Key>String</Key>
  10.      <Value/>
  11.     </PropertySetProperty>
  12.    </PropertyArray>
  13.   </m:Address>
  14.   <m:PropMods>
  15.    <PropertyArray>
  16.     <PropertySetProperty>
  17.      <Key>String</Key>
  18.      <Value/>
  19.     </PropertySetProperty>
  20.    </PropertyArray>
  21.   </m:PropMods>
  22.  </m:FindAddressCandidates>
  23. </soapenv:Body>
  24. </soapenv:Envelope>


 
La seule différence c'est le namespace "m:" et je ne comprends pas pourquoi il ne veut pas marcher avec la première requête SOAP.  :(


---------------

n°2027263
lordankou
Posté le 06-10-2010 à 12:32:55  profilanswer
 


 
 
hélas non je ne sais pas du tout quelle techno utilise l'appli cliente. la seule chose dont je dispose c'est le fichier de log avec les requêtes SOAP. c'est un peu léger mais bon ...
 
Pour les webservices au lieu de WCF pas le choix non plus


---------------

n°2027842
lordankou
Posté le 08-10-2010 à 13:44:13  profilanswer
 

est ce qu'il faudrait que je rajoute quelque chose à cette partie là :
 

Code :
  1. [WebService(Namespace = "http://www.esri.com/schemas/ArcGIS/9.3" )]


 
pour dire qu'il ne faut jamais rajouter de suffixe ?


---------------

n°2027866
lordankou
Posté le 08-10-2010 à 15:11:00  profilanswer
 


 
hélas non j'ai toujours un suffixe. peut importe que je rajoute ou pas un namespace il va me le faire automatiquement quand je génére la requête via SOAPUI et n'acceptera pas de requête sans un suffixe  :(  
 


---------------

n°2027899
lordankou
Posté le 08-10-2010 à 16:59:11  profilanswer
 

disons que ça marche presque  :pt1cable:  
 
il ne me rajoute plus le suffixe avec le namespace mais du coup quand je fais appelle à ma requette FindAdresseCandidates avec le code suivant :
 

Code :
  1. <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
  2.     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  4.     <soapenv:Body>
  5.         <FindAddressCandidates xmlns="http://www.esri.com/schemas/ArcGIS/9.3">
  6.             <Address xmlns="">


 
il ne trouve pas la variable Address.
Par contre si je vire le  xmlns="http://www.esri.com/schemas/ArcGIS/9.3" (ce que je ne peux pas faire car je ne controle pas cette partie) tout fonctionne parfaitement.
 
J'ai tenté de rajouter au début de la méthode de mon webservice :
 

Code :
  1. [SoapDocumentMethodAttribute(RequestNamespace = "http://www.esri.com/schemas/ArcGIS/9.3", ResponseNamespace = "http://www.esri.com/schemas/ArcGIS/9.3" )]


 
mais ça ne marche plus du tout avec ou sans le xmlns="http://www.esri.com/schemas/ArcGIS/9.3" dans la requête SOAP.
 
Bref je me rapproche de la solution finale mais c'est toujours pas ça...  :cry:


---------------

n°2028258
lordankou
Posté le 11-10-2010 à 10:03:09  profilanswer
 


 
désolé j'ai du mal m'exprimer mais je dispose bien du code du FindAddressCandidates. Par contre je ne controlle pas ce qui est envoyé au webservice (généré par un autre programme) et je dois envoyer une réponse conforme au fichier de log que je dispose. c'est pas l'idéal du tout pour développer mais je n'ai pas vraiment le choix.  :(  
 


---------------

n°2028345
lordankou
Posté le 11-10-2010 à 14:25:15  profilanswer
 

Tout d'abord un grand désolé pour mes réponses mais je pensais avoir déjà répondu (à force d'expliquer un peu à tout le monde le problème je me perds dans ce que j'ai déjà dit)
 

Citation :


Qu'est-ce que tu as essayé à partir du lien que j'ai donné ?


j'ai rajouté au début de mon webservice le code suivant pour ne plus avoir de suffixe devant mon namespace :
 

Code :
  1. [WebService(Namespace = "" )]
  2. [WebServiceBinding(ConformsTo = WsiProfiles.None)]


 
ce qui a eu pour effet de virer tout mes suffixe "m:" dans ma requête SOAP.
Or je voudrais conserver le namespace "http://www.esri.com/schemas/ArcGIS/9.3" pour ma méthode FindAdresseCandidates mais sans que ce namespace soit préfixé par quoique ce soit c'est à dire que dans ma requête SOAP avoir :
 

Code :
  1. <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
  2.     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  4.     <soapenv:Body>
  5.         <FindAddressCandidates xmlns="http://www.esri.com/schemas/ArcGIS/9.3">
  6.             <Address xmlns="">


 
or pour l'instant si je rajoute ce xmlns="http://www.esri.com/schemas/ArcGIS/9.3" je n'arrive pas à appeller ma méthode FindAddressCandidates. En supprimant le xmlns="http://www.esri.com/schemas/ArcGIS/9.3"  de ma requête SOAP je n'ai pas de problème.  
Le problème c'est que je dois créer une méthode de mon webservice qui doit recevoir cette requête SOAP et non créer une requête SOAP qui soit compatible avec la méthode de mon webservice.
 
Je dispose et je peux modifier à volonté le code de mon webservice (webservice qui contient donc la méthode FindAdresseCandidate).
 
Encore une fois désolé pour le manque de clarté dans mes propos (à force de jongler entre les projets et technologie je mélange absoluement tout  :( ) et surtout un grand merci de prendre le temps de tenter de répondre à mes questions  :jap:


---------------

mood
Publicité
Posté le 11-10-2010 à 14:25:15  profilanswer
 

n°2028420
lordankou
Posté le 11-10-2010 à 16:27:18  profilanswer
 


 
merci beaucoup pour les liens !
je regarderai ça dans la semaine (enfin si j'ai le temps  :( )


---------------

n°2029331
lordankou
Posté le 14-10-2010 à 16:35:22  profilanswer
 

bon bah je laisse tomber.  
J'ai tout essayer mais il me rajoute systématiquement un prefixe à mon namespace.  
bref je vais tenter de brancher le webservice comme ça en espérant que ça marche sinon et bien tant pis je ne peux pas inventer ce que je ne connais pas  :cry:


---------------

n°2264288
greje
Posté le 12-08-2015 à 10:07:20  profilanswer
 

Enfaite il existe plusieurs format d'encodage soap :
voici un lien qui explique trés bien ceci :  
http://www.jmdoudoux.fr/java/dej/chap-service-web.htm
 
Il faut donc ajouter des attribut à ton webservice correspondant à l'encodage de la requête qu'on t'envoie.
https://msdn.microsoft.com/fr-fr/li [...] .100).aspx
 
pour ton cas je pense qu'il faut rajouter ceci :
 [SoapDocumentService(Use=SoapBindingUse.Literal,ParameterStyle=SoapParameterStyle.Bare)]
 
++

n°2264345
TotalRecal​l
Posté le 13-08-2015 à 09:07:03  profilanswer
 

J'espère qu'il avait trouvé une solution tout seul depuis le temps :D


---------------
Topic .Net - C# @ Prog
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  webservice C# et consommation SOAP : problème de namespace

 

Sujets relatifs
Problème de décalage sur un wordpress[C#] [WPF] User control dans data template
[réglé]probleme newbe pour excel merci d'avanceconvertir \u00eb en ë (résolu, problème d'encodage/décodage)
C'est du MVC ça ?[Resolu] probleme suppression du contenu d'une cellule
problème ajout d'une actualitéFlash et CSS, template en ligne qui ne marche pas
Probleme avec getElementById 
Plus de sujets relatifs à : webservice C# et consommation SOAP : problème de namespace


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