Pregunta

He estado luchando para conseguir mi llamada jQuery a un WebMethod de trabajo. Estoy siendo rebotado por el servidor con un "401 no autorizado" respuesta. Debo tener una configuración incorrecta en el web.config o en otro lugar que se impide una llamada con éxito.

Su visión es apreciada!

Llamada a JS funcionan las invoca la llamada jQuery

button.OnClickAction = "PageMethod('TestWithParams', ['a', 'value', 'b', 2], 'AjaxSucceeded', 'AjaxFailed'); return false;";

función de JavaScript que hace la llamada jQuery

function PageMethod(fn, paramArray, successFn, errorFn) {
var pagePath = window.location.pathname;
var urlPath = pagePath + "/" + fn;

//Create list of parameters in the form:  
//{"paramName1":"paramValue1","paramName2":"paramValue2"}  
var paramList = '';
if (paramArray.length > 0) {
    for (var i = 0; i < paramArray.length; i += 2) {
        if (paramList.length > 0) paramList += ',';
        paramList += '"' + paramArray[i] + '":"' + paramArray[i + 1] + '"';
    }
}
paramList = '{' + paramList + '}';

//Call the page method
$.ajax({
    type: "POST",
    url: pagePath + "/" + fn,
    contentType: "application/json; charset=utf-8",
    data: paramList,
    timeout: 10000,
    dataType: "json",
    success: function(result) { alert('Overjoyed'); },
    error: function(result) { alert('No joy'); }
});
}

método Web en la página

    public partial class WebLayout : System.Web.UI.Page
{

    [WebMethod()]
    public static int TestNoParams()
    {
        return 1;
    }

    [WebMethod()]
    public static string TestWithParams(string a, int b)
    {
        return a + b.ToString();
    }
...

Respuesta como se ve en la consola de Firebug

json: {"Message":"Authentication failed.","StackTrace":null,"ExceptionType":"System.InvalidOperationException"}

y

"NetworkError: 401 Unauthorized - http://localhost/Care-Provider-Home/Profile/Personal-Profile.aspx/TestWithParams" TestWithParams

He mirado y leer los sitios habituales en la materia (Encosia, y otros), sino para servir. Ya sea que me falta una pieza crítica, o hay algunas sutilezas en los parámetros de seguridad de mi entorno que la prevención de una llamada.

Aquí están algunas otras cositas potencialmente útiles que pueden impactar en su diagnóstico:

  • Webmethods en CodeBehind
  • Uso de Sitecore CMS (no parece intefere, nunca se sabe)
  • IIS7
  • .NET 3.5
  • jQuery 1.3.2

espero sus puntos de vista y la dirección - gracias

!
¿Fue útil?

Solución

Sí, se nos hacía trabajar! Desde Sitecore CMS no realizar la reescritura de URL para generar URLs amigables (que reúne las páginas en capas, de forma dinámica, similar al concepto principal Página), se me ocurrió que podría estar causando algún problema al principio causó el error 401. Verifiqué esto mediante la creación de un proyecto independiente con un solo ASPX - y con un poco de trabajo que era capaz de llamar a los métodos web y obtener los valores utilizando el jQuery. Entonces creé casi idéntica ASPX en mi web raíz, pero dije Sitecore ignorarlo cuando se hace una petición a la misma (IgnoreUrlPrefixes en el web.config), después de un trabajo que era capaz también conseguir que funcione correctamente! Gracias por su ayuda.

Otros consejos

La respuesta JSON desde la consola de Firebug proporciona la mayor pista reveladora de la OMI. El System.InvalidOperationException (que monta extraña en una respuesta 401) sugiere que algo más está en el trabajo.

En primer lugar, buscando en Google sobre "InvalidOperationException WebMethod jquery" devuelve los artículos que sugieren problemas de serialización puede lanzar esta excepción. Para descartar esta posibilidad, cambie temporalmente "de datos: paramlist" a "de datos: '{}'". Además, adjuntar un depurador y ver si la excepción ocurre antes se ejecuta el método o después de que se completa y los intentos para serializar el resultado.

Si los pasos anteriores con las manos vacías, es posible que desee intentar restablecer a un web.config limpia o más de los resultados que vienen atrás de la "InvalidOperationException WebMethod" buscar

¿Qué tipo de autenticación está usando, si las hay? La primera cosa que viene a la mente es asegurarse de que su webApp en IIS está configurado para permitir que los usuarios anónimos (si en verdad desea hacer la llamada como un usuario anónimo). Además de que su modo de autenticación en web.config no está establecido en Windows por error. Si no se puede permitir que los usuarios anónimos y está usando la autenticación de formularios, el usuario tendrá que estar conectado antes de que esta llamada se realiza desde la página.

Si lo anterior se establecen correctamente, a continuación, tratar de hacer una llamada normal al servicio del lado del servidor para asegurarse de que el problema es coherente, independientemente del punto de invocación del servicio.

Post más ajustes si el problema no se resuelve. Espero que esto ayude.

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