Получение “401 Несанкционированной” ошибки последовательно с jQuery звонит в webmethod

Я изо всех сил пытался заставить свой вызов jQuery к webmethod работать. Я возвращаюсь сервером с "401 Несанкционированным" ответом. У меня должна быть неправильная установка в web.config или где-то в другом месте который предотвратил бы успешный вызов.

Ваше понимание ценится!

Назовите к функции js вызывание вызова jQuery

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

Функция JavaScript, которая выполняет вызов 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'); }
});
}

Веб-метод на странице

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

Ответ, как замечено в консоли Firebug

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

и

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

Я посмотрел на и считал обычные сайты на предмете (Encosia, и др.), но помочь. Или я пропускаю критическую часть, или существует некоторая тонкость в параметрах безопасности моей среды то предотвращение вызова.

Вот некоторые другие потенциально полезные лакомые кусочки, которые могут повлиять на Ваш диагноз:

  • Webmethods в codebehind
  • Используя CMS Sitecore (кажется, не вмешивается, никогда не не знает),
  • IIS7
  • .NET 3.5
  • jQuery 1.3.2

Я с нетерпением жду Вашего понимания и направления - спасибо!

8
задан CareMatch 19 February 2010 в 16:27
поделиться

3 ответа

Да, заработало! Поскольку Sitecore CMS действительно выполняет перезапись URL-адресов для создания удобных URL-адресов (она собирает страницы в слои, динамически, аналогично концепции главной страницы), мне пришло в голову, что это может вызвать некоторую проблему, изначально вызвавшую ошибку 401. Я проверил это, создав отдельный проект с одним ASPX - и с некоторой работой я смог вызвать веб-методы и получить значения с помощью jquery. Затем я создал почти идентичный ASPX в своем веб-корне, но сказал Sitecore игнорировать его, когда к нему поступает запрос (IgnoreUrlPrefixes в web.config), после некоторой работы мне также удалось заставить его работать успешно! Спасибо за вашу помощь.

6
ответ дан 5 December 2019 в 20:16
поделиться

Какую форму аутентификации вы используете, если таковая имеется? Первое, что приходит на ум, это убедиться, что ваш webApp в IIS настроен на разрешение анонимных пользователей (если вы действительно хотите сделать звонок как анонимный пользователь). Также убедитесь, что режим аутентификации в web.config не установлен по ошибке на Windows. Если вы не можете разрешить анонимных пользователей и используете аутентификацию форм, то пользователь должен будет войти в систему до того, как этот вызов будет сделан с вашей страницы.

Если все вышеперечисленные параметры установлены правильно, попробуйте сделать обычный вызов службы со стороны сервера, чтобы убедиться, что проблема не меняется независимо от точки вызова службы.

Опубликуйте дополнительные настройки, если проблема не будет решена. Надеюсь, это поможет.

0
ответ дан 5 December 2019 в 20:16
поделиться

ANY (или его синоним SOME ) является синтаксическим сахаром для EXISTS с простой корреляцией:

SELECT  *
FROM    mytable
WHERE   x <= ANY
        (
        SELECT  y
        FROM    othertable
        )

совпадает с:

SELECT  *
FROM    mytable m
WHERE   EXISTS
        (
        SELECT  NULL
        FROM    othertable o
        WHERE   m.x <= o.y
        )

При условии равенства в поле, не допускающем значения null, он становится похож на IN .

Все основные базы данных, включая SQL Server , MySQL и PostgreSQL , поддерживают это ключевое слово.

-121--1052113-

Я не уверен, что есть способ получить выходные данные уже запущенного процесса . Однако можно выполнить рефакторинг кода, чтобы не записывать его в Console.WriteLine , а вместо этого принять экземпляр TextWriter и записать в него.

В производстве можно просто передать метод Console.Out . В тестовом коде можно издеваться над этим типом и обеспечить гораздо более точное тестирование. Например,

[TestMethod]
public void OutputTest()
{
    var writer = new Mock<TextWriter>(MockBehavior.Strict);
    writer.Setup(x => x.WriteLine("expected output")).Verifiable();
    MySnazzyMethod(writer.Object, "input", 1, 'c');
    writer.Verify();
}

Производственный код

MySnazzyMethod(Console.Out, "input", 1, 'c');
-121--4012970-

Ответ json с консоли Firebug предоставляет наиболее информативную подсказку IMO. System.InvalidOperationException (которая странно едет на ответе 401) предполагает, что что-то большее находится в работе.

Во-первых, гуглинг на веб-методе jquery InvalidOperationException возвращает статьи, которые предполагают, что проблемы сериализации могут вызвать это исключение. Чтобы исключить это, временно измените «data: paramList» на «data:» {} «». Кроме того, подключите отладчик и проверьте, происходит ли исключение до выполнения метода или после его завершения и пытается ли он сериализовать результат.

Если шаги, описанные выше, окажутся пустыми, может понадобиться переустановить чистый файл web.config или прочитать дополнительные результаты поиска «InvalidOperationException webmethod»

2
ответ дан 5 December 2019 в 20:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: