WebService, ContentType erreur de format "text/xml" [Résolu]

cs_Keneda 36 Messages postés jeudi 8 mai 2003Date d'inscription 3 octobre 2012 Dernière intervention - 15 nov. 2005 à 17:26 - Dernière réponse : cs_Keneda 36 Messages postés jeudi 8 mai 2003Date d'inscription 3 octobre 2012 Dernière intervention
- 24 nov. 2005 à 16:47
Salut les codeurs fous (qui connaissent les WebServices), j'ai une colle à vous soumettre !!!!

Voili, je développe pour mon taf, un WebService sous Delphi 7, celui-ci va servir à partager des fonctionnalités avec un PDA en c#. Jusque là, pas de souçaille, en wsdl ou soap, j'ai toujours le même problème qui revient :

"Contenu reçu du type de paramètre de type de contenu incorrect : text/html - SOAP s'attend à text/xml"

Alors je sais, ils y en a qui vont me dire, ben c'est parceque tu envois pas le bon type de contenu, faut mettre du text/xml !!!
A cela je dis : Oui d'accord !!! j'ai déjà essayé de mettre Response.ContentType à "text/xml" mais rien n'y fait, il semble que le WebService s'en tempone le coquillard, j'ai parcouru la toile complète, en long, en large, en travers, sous différent langage. yen a pas un qui connais la réponse et qui a une solution qui marche. Alors je vous lance un défis !!! Trouvez une solution car ici ya que des bons
Post critérium : J'ai essayé Request.ContentType:= 'text/xml' sauf que la propriété de ce pignouf est en lecture seule !!!!
Ce qui est amusant quand on regarde l'aide Delphi c'est cette phrase :

"La plupart des requêtes HTTP ne nécessitent pas de contenu (Content). Pour la plupart des requêtes dont Method nécessite une valeur pour Content, la propriété ContentType a la valeur text/html. Cependant des requêtes HTTP pour des valeurs de Method spécifiques à un serveur peuvent utiliser tout type de média approprié à la requête."

Alors qu'en fait, c'est "text/xml" qu'elle doit avoir !!!!

Keneda, la fusée rouge
Afficher la suite 

8 réponses

Répondre au sujet
WhiteHippo 1270 Messages postés samedi 14 août 2004Date d'inscription 5 avril 2012 Dernière intervention - 23 nov. 2005 à 20:18
+3
Utile
Pour l'erreur "Contenu reçu du type de paramètre de type de contenu incorrect : text/html - SOAP s'attend à text/xml", il semble que cela soit un problème connu de Delphi 7. La solution serait d'inverser les lignes (automatiquement générées par Delphi) ISAPIThreadPool et ISAPIApp situées dans la clause uses du fichier .dpr

uses
ActiveX,
ComObj,
WebBroker,
ISAPIThreadPool, // incorrect, à inverser avec celui au dessous
ISAPIApp, // incorrect, à inverser avec celui au dessus
Unit1 in 'Unit1.pas' {WebModule1: TWebModule};

Voir ici :
http://qc.borland.com/wc/qcmain.aspx?d=2469
http://qc.borland.com/wc/qcmain.aspx?d=2614
http://shenoyatwork.blogspot.com/2004/06/soap-insanity-expecting-textxml.html

Cordialement.



<HR>



Il existe 10 catégories de personne. Ceux qui connaissent le binaire et les autres...
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de WhiteHippo
WhiteHippo 1270 Messages postés samedi 14 août 2004Date d'inscription 5 avril 2012 Dernière intervention - 16 nov. 2005 à 13:41
0
Utile
Je n'ai pas développé de WebService, mais à première vue Response.ContentType ="text/xml" est évidemment nécessaire mais il doit également falloir préciser la version de xml et surtout le charset utilisé :

Par exemple :
Response.Content := "<?xml version='1.0' encoding='ISO-8859-1'?>" + ....

Pour la norme XML Media Types voir la RFC3023 (http://www.rfc-editor.org/rfc/rfc3023.txt) histoire de vérifier que la requete envoyée respecte bien la norme XML.

N.B. Ce qui serait bien c'est de fournir un exemple de requete envoyée et/ou de la réponse reçue (evidemment sans dévoiler le contenu "critique", mais au moins en ayant l'ossature des messages)

Cordialement.


<HR>
Il existe 10 catégories de personne. Ceux qui connaissent le binaire et les autres...
Commenter la réponse de WhiteHippo
cs_Keneda 36 Messages postés jeudi 8 mai 2003Date d'inscription 3 octobre 2012 Dernière intervention - 17 nov. 2005 à 15:14
0
Utile
Je te remercie pour ces informations WhiteHippo, mais rien n'y fait, par contre, j'ai trouvé une solution partielle et assez hallucinante,
explication

Le fait d'appeler par mon client le WebService avec le proto soap et non en dynamique avec Wsdl permet de le faire fonctionner mieux, mais avec un plantage sur 2 de l'appel aux fonctions.
ex: http://localhost/WebServ/WebServ.dll/soap/IWebServ fonctionne mieux que
http://localhost/WebServ/WebSev.dll/wsdl/IWebServ

ensuite pour régler définitvement le problème, et c'est là que c'est le plus drôle, en ajoutant un delais juste après l'appel de la fonction du WebService, délais relativement rapide (100 milisecondes) cela fonctionne. Je me suis apperçut de cela car en débugage ça marche tout le temps. De plus et c'est encore une fois assez étrange, si je place le délais dans la fonction à l'interieur de mon WebService cela ne marche pas, il faut impérativement que je le fasse dans le client.

celui-ci agit comme-ci il rendait la main au client avant d'avoir terminer sa fonction, ce qui est assez fort, comment peut-il renvoyer un résultat avant de l'avoir calculé. Enfin bref, les WebServices m'étonneront toujours.

post tromatic: pas d'inquiétude quand a la réponse reçut, je peut la fournir ;-)



<?xml version= "1.0" ?> <-- dans la doc, cela signifie UTF-8




[file:///C:/WINSTORE/Request.xml# - ] <SOAP-ENV:Envelope xmlns:SOAP-ENV ="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd= " http://www.w3.org/2001/XMLSchema " xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC= " http://schemas.xmlsoap.org/soap/encoding/ ">






[file:///C:/WINSTORE/Request.xml# -] <SOAP-ENV:Body SOAP-ENV:encodingStyle ="http://schemas.xmlsoap.org/soap/encoding/" xmlns:NS2= " urn:WebWSTIntf " xmlns:NS3 ="urn:UConst">






[file:///C:/WINSTORE/Request.xml# +] <NS1:SauverTicketPDA xmlns:NS1= " urn:WebWSTIntf-IWebWST ">






<NumPosteCtrl xsi:type ="xsd:int">6</NumPosteCtrl>





<Ticket href= " #1 " />





[file:///C:/WINSTORE/Request.xml# -] <TabLigTic xsi:type ="SOAP-ENC:Array" SOAP-ENC:arrayType= " NS2:classLigDef[1] ">






<item href ="#2" />



</TabLigTic>





[file:///C:/WINSTORE/Request.xml# -] <TabPaiTic xsi:type= " SOAP-ENC:Array " SOAP-ENC:arrayType ="NS2:classPaiTicDef[1]">






<item href= " #3 " />



</TabPaiTic>



</NS1:SauverTicketPDA>





[file:///C:/WINSTORE/Request.xml# +] <NS2:classTicketDef id ="1" xsi:type= " NS2:classTicketDef ">








[file:///C:/WINSTORE/Request.xml# +] <NS2:classLigDef id ="2" xsi:type= " NS2:classLigDef ">






[file:///C:/WINSTORE/Request.xml# +] <NS2:classPaiTicDef id ="3" xsi:type="NS2:classPaiTicDef">








Keneda, la fusée rouge
Commenter la réponse de cs_Keneda
dominique.stock 446 Messages postés vendredi 7 novembre 2003Date d'inscription 8 octobre 2008 Dernière intervention - 17 nov. 2005 à 15:34
0
Utile
Bonjour,
Si je me souvines, il faut faire des CoUninitialize à la destruction, CoInitializeEx(nil,COINIT_MULTITHREADED) a la création du webmodule ...

Bon courage
Dom
Commenter la réponse de dominique.stock
cs_Keneda 36 Messages postés jeudi 8 mai 2003Date d'inscription 3 octobre 2012 Dernière intervention - 17 nov. 2005 à 23:36
0
Utile
Salut, j'essayes ça dès demain et je te tiens au courant

Merci d'avance

Keneda, la fusée rouge
Commenter la réponse de cs_Keneda
cs_Keneda 36 Messages postés jeudi 8 mai 2003Date d'inscription 3 octobre 2012 Dernière intervention - 18 nov. 2005 à 09:51
0
Utile
Salut, après moultes essais, ça marchte pas, j'ai tenté tous les mode de coInit

COINIT_MULTITHREADED
COINIT_APARTMENTTHREADED
COINIT_DISABLE_OLE1DDE
COINIT_SPEED_OVER_MEMORY

Je te remercie tout de même pour cette piste que je continue à creusé car j'ai bien l'impression qu'il s'agit d'un problème de configuration de base (au niveau de la compilation du WebService)

En tout cas, chiadesse, c'est-T-y pas possible ???? Normalement tout le monde devrais être confronté au problème, dès qu'on appel une fois sur deux une fonction d'un WebService ça merde ????

j'ai même fait le test avec un simple WebService qui dit bonjour le monde et ça fait pareil. grrrr à borland !!!!!!

Keneda, la fusée rouge
Commenter la réponse de cs_Keneda
cs_Keneda 36 Messages postés jeudi 8 mai 2003Date d'inscription 3 octobre 2012 Dernière intervention - 23 nov. 2005 à 17:53
0
Utile
Salut à tous, je tenais tout particulièrement à vous remercier d'avoir chercher et participer à la résolution de ce problème.

J'ai trouvé une solution qui semble efficace mais pour le moins étrange, elle ne fonctionne qu'en Delphi et pas en C#

Coté client (car c'est lui qui renvois le problème)
Il semble que l'utilisation de l'expert d'importation WSDL ne soit pas tout à fait au point dans Delphi. En effet, celui-ci génère un code source pour utiliser le client WSDL, sauf que lorsque-l'on appel le WebService via le lien WSDL, on obtien l'erreur "text/html...blablabla (voir titre de ma question ;-) )"

en mettant http://localhost/WebTest/WebTest.Dll/soap/IWebTest
au lieur de http://localhost/WebTest/WebTest.Dll/wsdl/IWebTest

ça marche, plus d'erreur, à la condition de mettre un sleep entre chaque appel de fonction du WebService. Sinon l'erreur revient.

donc en appel statique(soap) ça marche et pas en dynamique (wsdl) ?????

enfin, toujours-est-il que c'est une solution, même si je comprend toujours pas pourquoi

A bientôt !!!!

Keneda, la fusée rouge
Commenter la réponse de cs_Keneda
cs_Keneda 36 Messages postés jeudi 8 mai 2003Date d'inscription 3 octobre 2012 Dernière intervention - 24 nov. 2005 à 16:47
0
Utile
Alors là, je dis chapeau bas msieurs, j'ai galérer et jamais trouvé d'info ladessus, mais c'est parceque j'ai une tendinite de l'oeil
Si je pouvais, je viendrai sur le forum pour te faire un bisou

Merci merci merci

Keneda, la fusée rouge
Commenter la réponse de cs_Keneda

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.