Веб-служба не работает в вызове ASP.NET WebForms ajax - PullRequest
0 голосов
/ 21 августа 2011

Я пытаюсь вызвать простой веб-сервис, такой как на стороне клиента:

$.ajax({
    type: "POST",
    url: "/service/local/newsservice.asmx/DoPost", // "/news/post/do",
    data: {
        title: _title,
        markdown: _markdown,
        categoryId: 1
    },
    success: function (data) {
        alert("success!");
    }
});

Фактический сервис:

[WebService(Namespace = "http://service.site.com/service/news")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
[ScriptService]
public class NewsService : System.Web.Services.WebService
{
    [WebMethod]
    [ScriptMethod]
    public static void DoPost(string title, string markdown, int categoryId)
    {
        if (!(Roles.IsUserInRole("Owner") || Roles.IsUserInRole("Administrator")))
            return;

        CommunityNews.Post(title, markdown, categoryId);
    }
}

При использовании переписанного URL,который указывает на "/service/local/newsservice.asmx/DoPost", я получаю следующую ошибку:

HTTP-глагол POST, используемый для доступа к пути '/service/local/newsservice.asmx/DoPost', не допускается.

Когда я использую простой URL-адрес, я получаю вместо этого (через Firebug приложение молча завершается ошибкой):

Недопустимое имя метода веб-службы DoPost.

Что может происходить?

Ответы [ 2 ]

1 голос
/ 21 августа 2011

Встроенный способ вызова веб-службы в ASP.NET заключается в использовании ссылки на службу, которая создает объекты JavaScript для вызова методов веб-службы.

Класс ServiceReference

Для вызова методов веб-службы из ECMAScript (JavaScript) необходимо включить ссылку на службу на странице ASP.NET и применить Атрибут ScriptServiceAttribute для определения класса веб-службы. Если вы включите ссылку на веб-службу в Элемент управления ScriptManager или ScriptManagerProxy на странице ASP.NET, Объекты JavaScript будут созданы в браузере.

Прокси-объекты будут использоваться для следующих действий:

  • Выполнение асинхронных запросов в JavaScript к методам Web-сервиса,

  • Инициализировать экземпляры прокси-серверов типов данных, в особенно для использования в качестве входных параметров для вызова веб-методов.

Поскольку вы используете jQuery вместо прокси-объектов, созданных для ASP.NET AJAX, возможно, вам придется проверить правильность настройки нескольких вещей:

Предоставление веб-служб клиентскому сценарию

Чтобы включить вызовы веб-службы из сценария [ASP.NET AJAX], необходимо зарегистрировать ScriptHandlerFactory HTTP-обработчик в приложении Web.config файл. Обработчик обрабатывает вызовы из скрипта в .asmx Web Сервисы. В следующем примере показан элемент Web.config для добавив обработчик.

Эти параметры конфигурации уже являются частью файла Web.config. шаблон для любых новых веб-сайтов с поддержкой AJAX, которые вы создаете в Microsoft Visual Studio 2005.

<system.web>   
  <httpHandlers>
    <remove verb="*" path="*.asmx"/> 
    <add verb="*" path="*.asmx" 
      type="System.Web.Script.Services.ScriptHandlerFactory"
      validate="false"/>   
  </httpHandlers> 
<system.web>

Для вызовов веб-служб, которые не выполняются из сценария ASP.NET AJAX, обработчик ScriptHandlerFactory делегирует вызов по умолчанию обработчик, который использует SOAP вместо формата JSON. Делегация выполняется автоматически, и вам не нужно предпринимать никаких действий, если только Вы хотите отключить использование протокола SOAP для веб-сервисов. В этом случае вы должны ввести следующий параметр конфигурации в файл Web.config.

<system.web>   
  <webServices>
    <protocols>
      <clear/>
    </protocols>   
  </webServices> 
</system.web>
0 голосов
/ 21 августа 2011

Я думаю, что проблема в использовании

[ScriptMethod]

тебе действительно нужно здесь.

также проверьте, что это может помочь: [ScriptMethod]

http://msdn.microsoft.com/en-us/library/system.web.script.services.scriptmethodattribute.aspx

http://msdn.microsoft.com/en-us/library/byxd99hx(v=vs.71).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...