Доступ к веб-методу с помощью jquery - PullRequest
5 голосов
/ 11 мая 2010

В настоящее время я использую jquery ajax для вызова метода страницы (который прекрасно работает);

$.ajax({
          type: "POST",
          url: "ArticleList.aspx/GetArticleTags",
          data: "{'articleId' : " + articleId + "}",
          contentType: "application/json; charset=utf-8",
          dataType: "json",
          success: function (msg) {
            if (msg.hasOwnProperty("d")) { msg = msg.d; }
            var tags = JSON.parse(msg);
            //do something
          }
        });

Метод страницы;

  <WebMethod()>
  Public Shared Function GetArticleTags(ByVal articleId As Integer) As String
    Using myDb As New MyRepository
      Dim js As New JavaScriptSerializer
      Dim returnString = js.Serialize((From t In myDb.GetArticleTags(articleId) Select t.TagId, t.Tag).ToList)
      Return returnString
    End Using
  End Function

Сейчас я нахожусь в положении, где мне нужно получить доступ к моей функции GetArticleTags с нескольких страниц. Чтобы быстро его запустить и запустить, я мог бы

  1. Скопируйте функцию на мою новую страницу aspx и вызовите ее таким же образом.
  2. Продолжайте указывать на исходную страницу aspx.

Оба из которых довольно мусор.

Таким образом, единственный разумный способ - это вызвать метод wcf (webget). Это будет иметь преимущество в том смысле, что мне не придется вручную сериализовывать объекты в json. Это будет сделано для меня.

У меня уже есть спокойный веб-сервис в решении, но я опасаюсь вызывать его из моего веб-приложения. Я бы предпочел, чтобы весь код находился в моем веб-приложении, а не зависел от веб-службы, которая будет находиться в другом пуле приложений на том же сервере iis. Может потребоваться холодный запуск и т. Д., И мне нужно, чтобы это было быстро.

Я добавил файл wcf в свое веб-приложение, используя шаблон «Служба WCF с поддержкой AJAX». Но затем, делая это, я путаю свое веб-приложение с конечными точками в web.config и т. Д. (И в настоящее время получаю 500 исключений System.ServiceModel.ServiceActivationException)

Итак, до моего вопроса .... Какой лучший способ вызвать мою функцию? (Я думаю, это должен быть мой спокойный веб-сервис) Есть ли другой вариант, который я не рассматриваю?

Большое спасибо.

1 Ответ

2 голосов
/ 11 мая 2010

Вы должны создать службу ASMX с поддержкой AJAX или использовать обычный обработчик ASHX.

Если вы создаете обработчик ASHX, вам придется самостоятельно выполнять анализ и безопасность; Я рекомендую сервис ASMX, который может быть очень похож на метод вашей страницы.

...