¿Por qué este servicio web simple se niega a devolver JSON al cliente?asp.net servicio web asmx que devuelve xml en lugar de json
Aquí está mi código de cliente:
var params = { };
$.ajax({
url: "/Services/SessionServices.asmx/HelloWorld",
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
timeout: 10000,
data: JSON.stringify(params),
success: function (response) {
console.log(response);
}
});
Y el servicio:
namespace myproject.frontend.Services
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[ScriptService]
public class SessionServices : System.Web.Services.WebService
{
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string HelloWorld()
{
return "Hello World";
}
}
}
web.config:
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
</configuration>
Y la respuesta:
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">Hello World</string>
No importa lo que haga, la respuesta siempre vuelve como XML. ¿Cómo consigo que el servicio web devuelva a Json?
EDIT:
Aquí es la traza Fiddler HTTP:
REQUEST
-------
POST http://myproject.local/Services/SessionServices.asmx/HelloWorld HTTP/1.1
Host: myproject.local
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: application/json; charset=utf-8
X-Requested-With: XMLHttpRequest
Referer: http://myproject.local/Pages/Test.aspx
Content-Length: 2
Cookie: ASP.NET_SessionId=5tvpx1ph1uiie2o1c5wzx0bz
Pragma: no-cache
Cache-Control: no-cache
{}
RESPONSE
-------
HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Tue, 19 Jun 2012 16:33:40 GMT
Content-Length: 96
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">Hello World</string>
He perdido la cuenta de la cantidad de artículos que he leído ahora tratar de solucionar este problema. Las instrucciones están incompletas o no resuelven mi problema por algún motivo. Algunos de los más relevantes incluyen (todas sin éxito):
- ASP.NET web service erroneously returns XML instead of JSON
- asmx web service returning xml instead of json in .net 4.0
- http://williamsportwebdeveloper.com/cgi/wp/?p=494
- http://encosia.com/using-jquery-to-consume-aspnet-json-web-services/
- http://forums.asp.net/t/1054378.aspx
- http://jqueryplugins.info/2012/02/asp-net-web-service-returning-xml-instead-of-json/
Plus varios otros artículos generales.
Veo la etiqueta del marco de destino establecida en 4.0, ¿en qué versión del marco está integrada su aplicación? – Terry
En Propiedades del proyecto en la pestaña Aplicación, el Marco de destino es ".NET Framework 4". ¿Es suficiente, o tengo que configurarlo en otro lugar? Lo siento, soy relativamente nuevo en VS (más experiencia js) – njr101
Tu código parece correcto. ¿Podría registrar su solicitud AJAX y la respuesta del servidor utilizando WireShark? Sería útil ver estos paquetes HTTP para entender lo que sucede. – kol