2010-08-26 3 views
0

J'essaie d'appeler un service Web pour extraire des données XML d'une base de données. L'appel Ajax fonctionne bien si j'utilise un fichier statique, par exemple. comme ceci:Problème lors de la récupération de données XML à partir d'un service Web ASP.NET

$.ajax({ 
    type: "GET", 
    url: "test2.xml", 
    data: buildXMLDataRequestObject(), 
    dataType: "xml", 
    success: getXMLDataSucceeded, 
    error: getXMLDataFailed 
}); 

mais échoue lorsque j'essaie d'appeler le service Web par ex. comme ceci:

$.ajax({ 
    type: "POST", 
    url: "Services/CheckOutService.svc/GetXMLData", 
    data: buildXMLDataRequestObject(), 
    dataType: "xml", 
    success: getXMLDataSucceeded, 
    error: getXMLDataFailed 
}); 

L'erreur que je reçois est:

"The incoming message has an unexpected message format 'Raw'. The expected message formats for the operation are 'Xml', 'Json'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details."

La méthode GetXMLData ressemble à ceci:

// Interface 
[OperationContract] 
[WebInvoke(ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.WrappedRequest)] 
string GetXMLData(XMLDataRequest request); 
... 
// Implementation 
public string GetXMLData(XMLDataRequest request) 
{ 
    request.ShopperId = ShopperId; 
    return checkOutManager.GetXMLData(request); 
} 

La méthode GetXMLData a été configuré pour revenir XML et l'appel Ajax a son type de données défini comme XML, donc je suis très confus quant à la cause de l'erreur.

EDIT: Si je modifie le .ajax de $() appeler légèrement de sorte que le contentType est spécifié que je reçois cette erreur:

The data at the root level is invalid. Line 1, position 1.

J'ai essayé contentType: "text/xml" et contentType: " application/xml "et les deux donnent la même erreur.

EDIT: Hier (30 août) j'ai remarqué que l'appel de service réussirait si j'ai omis le paramètre de données de l'appel ajax. Je suppose qu'il y a quelque chose à propos de l'objet JSON qui cause un problème. Pour l'instant j'ai implémenté cette fonctionnalité sur le côté serveur de l'application mais j'ai l'intention de la revoir quand j'aurai du temps.

Répondre

0

Ma première supposition serait que le type de contenu était erroné. Que voyez-vous lorsque vous regardez le flux en utilisant Fiddler ou similaire?

+0

Bonjour John, Avec Fiddler saisissant le trafic, je peux voir une erreur HTTP 500 pour Services/CheckOutService.svc/GetXMLData comme prévu. Dans l'onglet En-têtes, il y a un élément Entity dont le type de contenu est "application/json; charset = utf-8". Est-ce que ceci pourrait être le problème? \t Aussi, que voulez-vous dire par "le flux"? Y a-t-il quelque chose de précis que je devrais regarder? – Malice

+0

Eh bien, vous dites plus haut que vous envoyez du XML, et que cet en-tête devrait être pour l'envoi de JSON, donc il y a une discordance là-bas. Par "le courant", je veux dire le tout, les en-têtes et le corps de l'entité et si cela correspond à ce que vous attendez. Si vous envoyez du XML, vous devriez envoyer un type de contenu XML, pas un type JSON. –

+0

Merci pour la réponse rapide. Donc, si ma requête Ajax a son type de données défini sur XML et le ResponseFormat de la méthode de service Web est défini sur WebMessageFormat.Xml d'où provient le paramètre json et, plus important encore, comment puis-je le modifier? – Malice

Questions connexes