Frage

Ich hatte Mühe, meinen JQuery -Anruf in ein WebMethod zu bringen, um zu arbeiten. Ich werde vom Server mit einer "401 nicht autorisierten" Antwort abprallen. Ich muss eine falsche Einstellung im Web.config oder an einem anderen Ort haben, der einen erfolgreichen Anruf verhindern würde.

Ihre Einsicht wird geschätzt!

Rufen Sie die Funktion JS an, die der JQuery -Anruf aufruft

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

JavaScript -Funktion, mit der die Jquery aufruft

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'); }
});
}

Webmethode in Seite

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

Antwort wie in Firebug -Konsole zu sehen

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

und

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

Ich habe mich die üblichen Websites zu diesem Thema angesehen und gelesen (Encosia et al.), Aber um in Anspruch zu nehmen. Entweder fehlt mir ein kritisches Stück oder es gibt einige Feinheiten in den Sicherheitsparametern meiner Umgebung, die einen Anruf verhindern.

Hier sind einige andere potenziell nützliche Leckerbissen, die sich auf Ihre Diagnose auswirken können:

  • WebMethods in CodeBehind
  • Mit Sitecore CMS (scheint es nicht zu wissen, nie zu wissen)
  • Iis7
  • .NET 3.5
  • JQuery 1.3.2

Ich freue mich auf Ihre Erkenntnisse und Richtung-danke!

War es hilfreich?

Lösung

Ja, es wurde funktioniert! Da Sitecore CMS eine URL -Umschreibung durchführt, um freundschaftliche URLs zu generieren (es stellt die Seiten in Schichten, ähnlich wie das Master -Page -Konzept, zusammengestellt), fiel mir ein, dass dies möglicherweise ein Problem verursacht, das anfangs den 401 -Fehler verursacht hat. Ich habe dies überprüft, indem ich ein separates Projekt mit einem einzelnen ASPX erstellt habe-und mit einigen Arbeiten konnte ich die Webmethoden anrufen und Werte mit der JQuery abrufen. Ich habe dann fast identische ASPX in meinem Webroamm erstellt, sagte Sitecore jedoch, er solle es ignorieren, wenn eine Anfrage daran gestellt wird (Ignoreurlprefixes im Web.config), nach einiger Arbeit konnte ich es auch erfolgreich zum Laufen bringen! Danke für Ihre Hilfe.

Andere Tipps

Die JSON -Antwort von der Firebug -Konsole bietet den aussagekräftigsten Hinweis IMO. Das System.invalidoperationException (das seltsamerweise auf einer 401 -Antwort fährt) deutet darauf hin, dass etwas mehr am Werk ist.

Erstens kann das Googeln auf "InvalidOperationException -WebMethod jQuery" Artikel zurückgibt, die auf Serialisierungsprobleme hinweisen, kann diese Ausnahme ausführen. Um dies auszuschließen, ändern Sie vorübergehend "Daten: ParamList" in "Daten: '{}'". Fügen Sie außerdem einen Debugger bei und prüfen Sie, ob die Ausnahme vor der Ausführung der Methode oder nach Abschluss und versucht, das Ergebnis zu serialisieren.

Wenn die obigen Schritte leer werden, möchten Sie möglicherweise versuchen, auf ein sauberes Web.config zurückzusetzen oder mehr der Ergebnisse zu lesen, die von der Suche "InvaleroperationExceptionException" zurückkommen

Welche Form der Authentifizierung verwenden Sie, falls vorhanden? Das erste, was mir in den Sinn kommt, ist sicherzustellen, dass Ihr WebApp in IIS so eingestellt ist, dass anonyme Benutzer (wenn Sie tatsächlich den Anruf als anonymer Benutzer tätigen möchten). Auch dass Ihr Authentifizierungsmodus in Web.config versehentlich nicht auf Windows eingestellt ist. Wenn Sie anonyme Benutzer nicht erlauben und Formulare Authentifizierung verwenden, muss der Benutzer angemeldet werden, bevor dieser Anruf von Ihrer Seite getätigt wird.

Wenn die oben genannten ordnungsgemäß festgelegt sind, versuchen Sie, von der Server einen regelmäßigen Anruf des Dienstes zu tätigen, um sicherzustellen, dass das Problem unabhängig von der Aufrufspitze des Dienstes konsistent ist.

Veröffentlichen Sie mehr Einstellungen, wenn das Problem nicht behoben ist. Hoffe das hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top