2012-09-12 4 views
2

Je reçois une erreur HTTP 400 en essayant d'utiliser le service Web Sharepoint Query. Mon raisonnement est que cela est en grande partie dû à un XML malformé que je suis incapable de comprendre pourquoi:400 Erreur incorrecte lors de l'utilisation des services Web Sharepoint

Ceci est le corps de la demande SOAP, quelqu'un peut-il penser à ce qui ne va pas?

<?xml version="1.0" ?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> 
    <S:Body> 
    <Query xmlns="urn:Microsoft.Search"> 
     <queryXml>" 
     <QueryPacket xmlns='urn:Microsoft.Search.Query' Revision='1000'> 
      <Query> 
      <Context> 
       <QueryText language='en-US' type='STRING'> 
       Word 
       </QueryText> 
      </Context> 
      </Query> 
     </QueryPacket>" 
     </queryXml> 
    </Query> 
    </S:Body> 
</S:Envelope> 
+1

Comme le montre le ' " ..."' est pas valide. Je suppose que la valeur du noeud 'queryXml' devrait être du texte? Vous avez besoin d'un wrapper CDATA autour de cette valeur ou vous avez besoin de l'encoder. –

+0

Il est censé être une chaîne, la chaîne est cependant XML ... cela peut être référencé de: http://msdn.microsoft.com/en-us/library/ms573544.aspx Pouvez-vous élaborer un peu plus loin sur CDATA wrapper? – user1020069

Répondre

4

Le XML est en effet malformé, probablement parce que tout ce qui est l'analyse qu'il voit entre deux citations à partir ou à la fin des balises, ce qui est illégal.

Il y a deux approches que vous pouvez essayer:

  1. Enroulez le contenu <queryXml> avec des balises CDATA:

    <queryXml><![CDATA[<QueryPacket>...</QueryPacket>]]></queryXml> 
    

    Notez que les citations sont partis ici; vous pouvez les remettre si vous avez vraiment besoin (bien que je ne suis pas sûr ce qu'il y aurait pour objet):

    <queryXml><![CDATA["<QueryPacket>...</QueryPacket>"]]></queryXml> 
    
  2. Encode le contenu de sorte qu'il est pas traité comme XML:

    <queryXml>&lt;QueryPacket&gt;...&lt;/QueryPacket&gt;</queryXml> 
    

    Il sont plusieurs façons d'accomplir l'encodage. Je vais laisser cela comme un exercice pour vous, car je ne sais pas comment vous construisez votre demande SOAP.

+0

merci, j'ai pensé pourquoi CDATA était nécessaire, et fondamentalement vu votre réponse plus tard, ce qui est correct :) – user1020069

Questions connexes