• Microsoft .NET
  • ASP.NET
  • Microsoft ASP.NET AJAX: получение данных с сервера при помощи веб-сервисов

Microsoft ASP.NET AJAX: получение данных с сервера при помощи веб-сервисов - Вызов веб-сервиса из приложения ASP.NET AJAX

ОГЛАВЛЕНИЕ

Вызов веб-сервиса из приложения ASP.NET AJAX

Как я уже упомянул во введении в статью, при разработке приложений ASP.NET AJAX с использованием  клиентской модели разработки разработчики ответственны за написание кода JavaScript, который выполняет асинхронные вызовы к серверу и обновляет внешний вид страницы при ответе. Одним способом вызова логики серверной стороны является вызов веб-сервиса. Но вызов веб-сервиса из скрипта клиентской стороны создаст два препятствия:

  1. Сообщения веб-сервисов обычно закодированы соответственно протоколу SOAP. Тем не менее, AJAX-приложения предпочитают JSON - альтернативный стандарт кодировки, более подходящий для JavaScript.
  2. При использовании веб-сервиса из клиентского приложения, Visual Studio создает прокси-класс (proxy class) на клиенте, который дублирует интерфейс веб-сервиса. Тем не менее, при вызове веб-сервиса из JavaScript клиентской стороны нам нужно иметь прокси-класс, основанный на JavaScript.

Хорошей новостью является то, что Microsoft позволяет решить данные проблемы таким образом, что разработчику необходимо выполнить всего лишь  несколько действий. Что касается первого препятствия, Microsoft добавила классы атрибутов к .NET Framework , которые вы можете использовать для модификации вашего класса веб-сервиса таким образом, чтобы он указывал то, что веб-сервис должен также поддерживать сообщения, закодированные в формате JSON. Вкратце, вы можете указать .NET Framework разрешать клиентам вызывать ваш веб-сервис, используя сообщения JSON в дополнение к стандартным SOAP-сообщениям, добавив всего одну строку кода.

Вторая проблема решаема при помощи элемента управления ScriptManager. Вспомните, что каждая страница, которая использует структуру ASP.NET AJAX, требует наличия  элемента управления ScriptManager.Поэтому в примерах данной статьи мы просто добавляли данный элемент управления к странице и ничего не делали с ним. Тем не менее, вы можете ссылаться на неопределенное количество веб-сервисов из ScriptManager, который создает и использует прокси-класс, основанный на JavaScript. В результате, вы можете вызвать веб-сервис из скрипта клиентской стороны, используя прокси-класс, поэтому вам не нужно создавать код для преобразования сообщений в последовательную форму и обратно, создавать код для отсылки сообщения и т.п.

Создание веб-сервиса, который может быть вызван из приложения ASP.NET AJAX

Для демонстрации вызова веб-сервиса из приложения ASP.NET AJAX, давайте создадим простой веб-сервис в нашем ASP.NET веб-сайте и затем создадим страницу, которая вызывает данный веб-сервис из JavaScript и отображает результаты на странице. (Продемонстрированный код доступен в конце данной статьи.) В частности, давайте создадим веб-сервис, который принимает два целочисленных значения в качестве входных параметров и возвращает их сумму.

Начните с добавления нового веб-сервиса к вашему веб-сайту ASP.NET щелкнув правой кнопкой мыши по каталогу, где вы хотите разместить финальную точку сервиса, и затем выбрав опцию добавления нового элемента (Add New Item) и шаблон веб-сервиса (Web Service template). Назовите новый веб-сервис NorthwindServices.asmx. Код данного веб-сервиса расположен в отдельном файле, названном NorthwindServices.asmx.vb или NorthwindServices.asmx.cs и является местом, где мы укажем методы для нашего веб-сервиса. Создайте метод Add вписав следующий код:

Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols

<WebService(Namespace:="http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class NorthwindServices
   Inherits System.Web.Services.WebService

   <WebMethod()> _
   Public Function Add(ByVal x As Integer, ByVal y As Integer) As Integer
      Return x + y
   End Function
End Class

Для того, чтобы данный метод был доступен приложению ASP.NET AJAX , нам необходимо отметить данный сервис как "script service" (скриптовый сервис). Для этого нам нужно модифицировать класс веб-сервиса с атрибутом System.Web.Script.Services.ScriptService. Просто добавьте атрибут до определения класса веб-сервиса следующим образом:

<WebService(Namespace:="http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
<System.Web.Script.Services.ScriptService()> _
Public Class NorthwindServices
   ...
End Class

Имея данный дополнительный атрибут, веб-сервис NorthwindServices может теперь принимать сообщения JSON в дополнение к стандартным сообщениям SOAP.