2010-05-01 4 views
8

Je viens de mettre à jour une copie de test de mon site vers asp.net 4.0 et j'ai remarqué un problème étrange qui ne se pose que lorsque je télécharge le site sur mon serveur.Service Web asmx renvoyant xml au lieu de json dans .net 4.0

le site a un service Web asmx qui renvoie json, mais quand je lance le site sur mon serveur, il renvoie xml. Cela fonctionne correctement sur asp.net 3.5 depuis plus d'un an.

le WEBMETHOD est décoré avec les attributs corrects ...

[WebMethod][ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public List<LocationRecentChange> RecentChanges() 

et sur ma machine locale, il retourne JSON.

encore sur le serveur (Windows 2008 64bit) il renvoie xml. En utilisant la console firebug, vous verrez une réponse 200 OK et un tas de XML, et sur ma machine locale les données retournées sont celles que j'attends.

Voici le javascript qui appelle le service ..

function loadRecentData() { 
$.ajax({ 
    type: "POST", 
    url: "service/spots.asmx/RecentChanges", 
    data: "{}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: loadRecentUpdates, 
    failure: function(msg) { 
     //alert(msg); 
    } 
}); 

}

Toute suggestion bienvenue, cela a m'a fait perplexe!

Répondre

7

Etes-vous sûr que .NET 4 est installé sur votre serveur?

La chaîne "type" de ScriptHandlerFactory dans .NET 4 est:

System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 

ASP.NET 4 comprend maintenant que dans son web.config par défaut au niveau de la machine. Donc, vous ne devriez pas avoir besoin de mappage vers ScriptHandlerFactory dans web.config de votre projet, 3.5 ou 4.

+0

Il s'avère que le serveur a quelque chose de funky avec IIS. Je ne peux pas recréer le problème localement, mais l'insertion de l'élément dans le fichier web.config le corrige. – Baldy

+3

J'ai exactement le même problème.Pouvez-vous modifier la réponse pour inclure le code exact que j'ai besoin d'ajouter à mon web.config (y compris la section à laquelle il doit être ajouté)? Merci. – njr101

2

Eh bien, je réussi à le suivre vers le bas en lisant sur les services web ajax demandes sont traitées ici ...

http://www.asp.net/%28S%28ywiyuluxr3qb2dfva1z5lgeg%29%29/learn/ajax/tutorial-05-cs.aspx

essentiellement un gestionnaire de asp.net 3.5 doit être déclarée dans votre site Web. config handlers section sous system.webserver afin qu'il puisse renvoyer une réponse JSON au lieu de la valeur par défaut.

voici ce que vous devez ajouter à la web.config handlers section (également ajouter à httpHandlers section si vous avez besoin pour soutenir IIS6) ...

<handlers> 
    <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 

j'ai mes soupçons que cela devra remplacer par une version .net 4.0 du même gestionnaire, mais pour l'instant, cela fonctionne.

+1

J'ai exactement le même problème. Pouvez-vous modifier la réponse pour inclure la section include à laquelle elle doit être ajoutée? Et tous les éléments supplémentaires tels que si nécessaire. Merci. – njr101

+0

l'a mis à jour pour vous et ajouté des liens à la documentation de la section pertinente – Baldy

+0

Mais vous n'avez pas dit où ajouter la section ... Où cela va-t-il? Où que je le dise, j'ai une erreur. – NickG

Questions connexes