Pregunta

Tengo un método web simple en una aplicación asp.net 2.0 (usando las extensiones 1.0, no las extensiones 3.5 ajax). Estoy intentando llamar al método desde jQuery y cuando lo hago como muestran los innumerables ejemplos en Internet y aquí en SO, recibo un mensaje de error interno del servidor.

Aquí está mi código actual:

[WebMethod]
[ScriptMethod(ResponseFormat=ResponseFormat.Json)]
public string Select(string login)
{
    UserProfile profile = UserProfile.GetUserProfile(login);

    return "{ FirstName: '" + profile.FirstName + "', " +
             "LastName: '" + profile.LastName + "', " +
             "EmailAddress: '" + profile.EmailAddress + "', " +
             "PhoneNumber: '" + profile.PhoneNumber + "' }";
 }

Y ahora el jQuery:

$.ajax({
    type: "POST",
    url: "Services/ProfileService.asmx/Select",
    dataType: "json",
    data: "{'login':'DOMAIN%5CUSER1'}",
    contentType: "application/json; charset=utf-8",
    success: function(msg){ alert(msg); },
    error: function(xhr){ alert(xhr.statusText);}     
});

El servicio web también está decorado con el atributo [ScriptService] . Si comento el contentType, cambio el dataType a texto, y los datos se convierten en una cadena de consulta (nombre = valor), obtengo el XML devuelto adecuadamente.

¿A dónde me voy mal?

ACTUALIZACIÓN: Estoy usando jQuery v1.3.1 y probando tanto en IE6 como en Firefox 3. Estoy obteniendo resultados consistentes.

¿Fue útil?

Solución

Este fue un error estúpido de mi parte. El problema ha sido resuelto. Aunque incluí la referencia a las Extensiones AJAX, olvidé volver a escribir el httphandler para los servicios ASMX en la clase ScriptHandlerFactory.

Al agregar esto se resolvió el problema.

Desde que recibí algunos correos electrónicos que me preguntaban sobre ejemplos o cómo solucioné el problema, escribí una publicación en el blog sobre cómo hacer esta sopa a las nueces.

http: //randomactsofcoding.blogspot .com / 2009/03 / jquery-json-and-asmx-20-services.html

Otros consejos

Yeap. Debes abandonar ASMX para WCF. Recomendación de los mismos Microsoft. Supongo que no te ayudará en tu problema, pero harías bien en considerar WCF o al menos empezar a ver esa tecnología.

Tuve el mismo problema pero se solucionó cuando agregué lo siguiente al archivo de código

[System.Web.Script.Services.ScriptService]

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top