Question

Je me bats pour obtenir mon appel jquery à un webmethod de travailler. Je suis été ballotés par le serveur avec une réponse « 401 Unauthorized ». Je dois avoir un réglage incorrect dans le web.config ou ailleurs qui serait la prévention d'un appel réussi.

Votre idée est appréciée!

Appel à js fonction l'appelle l'appel jquery

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

fonction JavaScript qui fait l'appel 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éthode Web à la page

    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();
    }
...

Réponse vu dans la console Firebug

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

et

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

Je l'ai regardé et lire des sites habituels sur le sujet (Encosia, et al), mais de profiter. Soit je manque un élément essentiel, ou il y a quelques subtilités dans les paramètres de sécurité de mon environnement empêchant un appel.

Voici quelques autres petits morceaux potentiellement utiles qui peuvent avoir un impact sur votre diagnostic:

  • Webmethods dans codebehind
  • Utilisation Sitecore CMS (Ne semble pas intefere, ne sait jamais)
  • IIS7
  • .NET 3.5
  • jQuery 1.3.2

Je me réjouis de vos idées et de la direction - je vous remercie

Était-ce utile?

La solution

Oui, il a réussi à avoir travailler! Depuis Sitecore CMS n'effectue la réécriture d'URL pour générer des URLs (il assemble les pages en couches, de façon dynamique, semblables à Master concept de page), il me vint qu'il peut causer un problème au départ a causé l'erreur 401. J'ai vérifié en créant un projet distinct avec un seul ASPX - et avec un travail que j'ai pu appeler les méthodes Web et obtenir des valeurs en utilisant la jquery. Je me suis alors créé presque identique ASPX dans ma racine Web, mais dit Sitecore de l'ignorer lorsqu'une demande lui est faite (IgnoreUrlPrefixes dans le web.config), après un travail que j'ai pu obtenir aussi de travailler avec succès! Merci pour votre aide.

Autres conseils

La réponse JSON de la console Firebug fournit l'OMI l'indice le plus révélateur. Le System.InvalidOperationException (qui se déplace étrangement sur une réponse 401) suggère quelque chose de plus est au travail.

D'abord, googler sur « InvalidOperationException webmethod jquery » renvoie des articles qui suggèrent des problèmes de sérialisation peuvent jeter cette exception. Pour exclure cette, modifier temporairement « les données: ParamList » à « données: « {} » ». De plus, attacher un débogueur et voir si l'exception se produit avant que la méthode exécute ou après avoir terminé et tente de sérialiser le résultat.

Si les étapes ci-dessus se présentent vide, vous voudrez peut-être essayer de réinitialiser un web.config propre ou lire la suite des résultats qui reviennent de la recherche « InvalidOperationException webmethod »

Quelle forme d'authentification que vous utilisez, le cas échéant? La première chose qui vient à l'esprit est de vous assurer que votre WebApp dans IIS est configuré pour permettre aux utilisateurs anonymes (si vous désirez en effet de faire l'appel en tant qu'utilisateur anonyme). Que le mode d'authentification dans web.config n'est pas défini sur Windows par erreur. Si vous ne pouvez pas permettre aux utilisateurs anonymes et que vous utilisez l'authentification par formulaire, l'utilisateur devra être connecté avant que cet appel est fait à partir de votre page.

Si ce qui précède sont correctement réglés, essayez de faire un appel régulier au service du côté serveur pour vous assurer que le problème est cohérent quel que soit le point d'appel du service.

Poster plus de paramètres si le problème persiste. Espérons que cela aide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top