У вас вопросы?
У нас ответы:) SamZan.net

Лабораторная работа 53

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 29.12.2024

Лабораторная работа №5.

Создание Web-сервисов в Visual Studio 2008.

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

По своей сути сервис представляет собой интерфейс (или набор методов), который является «черным ящиком» доступа (при помощи обычных форматов и протоколов) к совместно  используемым функциям. При таком определении сервис должен быть слабо связан со своими клиентами и работать с пересечением границ. Эти границы в течение длительного времени мешали применять возможности многократно используемых компонентов приложений  (таких как сервисы). Работая с пересечением таких границ, как процессы, компьютеры, языки и операционные системы, сервисы могут использоваться многими потенциальными  клиентами сегодняшнего и завтрашнего дня. Visual Studio 2008 и .NET Framework 3.5 позволяют разработчикам создавать ориентированные на сервис приложения без необходимости углубляться во внутренние подробности SOAP, HTTP, удаленного взаимодействия и WDSL.

Вместо этого вы можете сосредоточиться на создании сервисов, которые решают ваши конкретные бизнес-проблемы. После этого вы можете позволить Framework позаботиться о ваших потребностях (в отношении форматов и протоколов).

Сервис определяет контракт между вызывающим клиентом и самим сервисом. Этот  контракт утверждает нечто такое: «если вы пришлете мне данные в таком-то формате, то я их обработаю и верну вам результаты в таком-то формате». Формат этих данных и  коммуникационные параметры этих вызовов основаны на таких открытых стандартах, как XML и SOAP. Аналогичные стандарты позволяют клиенту «обнаружить» Web-сервис и его контракт, а затем и работать с ним. Эти стандарты сервисов пересекают границы технологий и поэтому делают сервисы очень привлекательными для обмена данными между разнородными средами.

В Web-технологиях протокол HTTP стал вездесущим. Серверы смогли взаимодействовать между собой. Затем пришел стандарт XML для описания сообщений. При помощи этих двух технологий (HTTP и XML) выполнявшиеся на разных платформах приложения получили способ обмена между собой. Они смогли посылать и получать структурированные сообщения по общему протоколу — так родились Web-сервисы.

Web-сервисы по-прежнему удерживают доминирующее положение при создании сервисных приложений. Они замечательно подходят для обмена через Интернет. Однако они не всегда являются самым эффективным средством обмена. Например, если клиент и сервис основаны на одной и той же технологии (или даже на одном компьютере), то они часто могут согласовать более эффективный способ для обмена (такой как Remoting — удаленное взаимодействие). Разработчики сервисов сталкиваются с теми же проблемами, которых они пытались избежать. Теперь им нужно выбирать между созданием эффективных внутренних сервисов и возможностью получить к ним максимально широкий доступ через Интернет.

И если нужно поддерживать и то, и другое, то, возможно, им придется создавать несколько версий (или, по крайней мере, прокси) для своего сервиса. Эту проблему фирма Microsoft решила при помощи технологии Windows Communication Foundation (WCF). При помощи WCF вы можете создавать ваш сервис без учета границ. После этого WCF позаботится о выполнении вашего сервиса самым эффективным образом (в зависимости от вызывающего клиента). Для решения этой задачи WCF вводит концепцию конечной точки. Ваш сервис может иметь множество конечных точек (настроенных во время программирования или после развертывания). Каждая конечная точка указывает, как именно сервис  поддерживает вызывающего клиента через Интернет, через Remoting, через MSMQ и т. д. WCF позволяет вам сфокусироваться на создании функционала вашего сервиса. Она сама  позаботится о том, как максимально эффективно обмениваться с вызывающими клиентами. Один сервис WCF может эффективно поддерживать много различных типов клиентов.

Приложения Web-сервиса ASP.NET

Перед тем как начать, разработчику важно понять ключевые концепции и стандартные термины Web-сервисов. Эти знания обеспечат понимание вами того, что происходит в вашем приложении. Они также помогут вам при чтении документации .NET и статей о создании приложений Web-сервисов. Поэтому мы составили следующий глоссарий ключевых терминов, имеющих отношение к Web-сервисам.

  •  Web-сервис представляет собой цельный набор логики приложения, которая выполняет действия и предоставляет данные. Web-сервис группирует эту логику в виде методов, которые можно вызвать по HTTP. He все сервисы являются Web-сервисами; таковыми считаются только те, которые работают через Интернет.
  •  Метод Web-сервиса (или Web-метод) представляет собой метод, предоставляемый Web-сервисом. Web-метод может принимать параметры и возвращать ответ.
  •  XML (Extensible Markup Language, расширяемый язык разметки) используется для представления и описания данных независимым от платформы образом. XML может применяться для представления как простых, так и сложных элементов данных и связей. Именно стандарт XML делает Web-сервисы возможными.
  •  WSDL (Web Service Description Language, язык описания Web-сервиса) служит для  описания содержимого Web-сервиса и его Web-методов. WDSL обеспечивает контракты сообщений данных, которые позволяют клиентам работать с сервисом.
  •  XSD (XML Schema Document, документ схемы XML) содержит набор предопределенных типов (строковых, десятичных и т. д.) и стандартный язык для описания ваших собственных сложных типов. Документ схемы XML (называемый также XSD) использует эти типы для описания (и ограничения) содержимого XML-сообщения.
  •  SOAP (Simple Object Access Protocol) — это основанный на XML протокол для обмена между клиентом и Web-сервисом. Можно считать, что SOAP представляет формат  сообщений при их передаче по проводам. SOAP обертывает XML-сообщения для передачи через Интернет. Большая часть сообщений SOAP посылается по HTTP. Однако они могут также посылаться по транспортным протоколам (таким как SMTP или FTP).
  •  HTTP (Hypertext Transfer Protocol) представляет собой протокол обмена, используемый Web-сервисами для передачи отформатированных (или закодированных) протоколом
  •  SOAP сообщений. HTTP также является способом реализации стандартных запросов (get и post) для Web-страниц.
  •  UDDI (Universal Description, Discovery and Integration) используется для определения реестра Web-сервисов. Эта возможность полезна для публикации сервисов (чтобы  разработчики могли их найти и воспользоваться ими).
  •  URI (Uniform Resource Identifier) обеспечивает средство локализации в Интернете. В большинстве случаев URI — это URL, которые указывают на сервис.
  •  DISCO (Discovery Document) — файл DISCO предоставляет информацию, которая  связывает с ключевыми элементами Web-сервиса (это ссылки на XSD, привязки SOAP, а также пространства имен). Программы могут использовать файл DISCO для  определения того, как надо работать с данным Web-сервисом.
  •  WS-* представляет общие стандарты Web-сервисов.
  •  WSE (Web Service Enhancements)— это реализация стандартов WS-* фирмой Microsoft. Последняя версия — это WSE 3.0. Она реализует транзакции Web-сервисов и  улучшенную систему безопасности. WSE можно скачать, она работает как надстройка для Visual Studio.

Visual Studio делает создание Web-сервисов похожим на разработку других классов и  компонентов. Таким образом, сложные аспекты SOAP, WSDL, XSD (и прочего) абстрагируются (и автоматически генерируются данным инструментом). Вы по-прежнему имеете доступ к этим элементам и управление ими (если они вам нужны). Однако по большей части вы определяете Web-сервис точно так же, как создаете класс. Затем вы определяете Web-методы (аналогично тому, как вы определяли бы методы класса). Visual Studio создает соответствующий контракт схемы для сигнатур ваших методов и описывает ваши Web-сервисы в терминах WSDL. Затем .NET Framework позаботится о надлежащей упаковке ваших  данных в сообщение SOAP и передаче их по HTTP.

Web-сервисы в .NET создаются и предоставляются в той же самой инфраструктуре, которая предоставляет Web-сайты ASP.NET. Это означает, что Web-сервисы используют ту же самую серверную технологию (Internet Information Services, или IIS) и те же самые объекты (такие как Application, Session и Context). Таким образом, те разработчики, которые знакомы с изготовлением приложений ASP.NET, могут использовать этот опыт для Web-сервисов. Вы можете использовать встроенное управление состоянием, сервисы аутентификации и производительность ASP.NET.

Web-сервис в .NET— это просто Web-адрес файла Web-сервиса, имеющего расширение asmx. Сервис имеет стандартный адрес http://.... Этот файл используется как URI для Web-сервиса (аналогично Web-странице). Вы пишете ваш выделенный код для этого файла, а Visual Studio и .NET делают все остальное (прикрепляют соответствующий WSDL и  активируют вызовы SOAP no HTTP). Давайте более подробно рассмотрим использование Visual Studio и ASP.NET для предоставления Web-сервисов.

Шаблон проекта ASP.NET Web Service Project

Web-сервис можно добавить в любой Web-проект ASP.NET. Visual Studio предоставляет также и специфичный для Web-сервиса шаблон проекта. Этот шаблон полезен тогда, когда вы хотите создать целый слой сервисов или отделить ваши сервисы от любых элементов пользовательского интерфейса. Проект из этого шаблона вы создаете точно так же, как и другие Web-проекты: выбор File | New | Website приведет к открытию диалогового окна Add New Project (рис. 1). Здесь вы можете выбрать шаблон ASP.NET Web Service Application для того, чтобы описать специфичный для Web-сервиса проект.

Рис.1. Создаем новый проект Web-сервиса

Как и при описании нового Web-сайта, вы можете указать местоположение Web-сервиса. Вы можете выбрать местоположение в файловой системе или указать Web-сервер (работающий по протоколу HTTP), либо использовать FTP для указания места хранения Web-сервиса. Кроме того, вы можете задать язык по умолчанию, на котором должен  программироваться Web-сервис.

Файлы Web-сервиса

Реальный проект Web-сервиса (который создается по шаблону Web-сервиса) содержит только один сервис, конфигурационный файл и набор стандартных ссылок. Ссылка на сер вис дается как ссылка на asmx-файл. Этот файл используется как URI (и URL) для Web-сервиса. Фактическое содержимое этого файла показано на рис.2.

Рис. 2. Проект Web-сервиса

Файл с расширением asmx на этом рисунке имеет представление конструктора для добавления компонентов, представление разметки для описания сервиса ASP.NET, а также представление выделенного кода (или просто кода). Вы можете переключаться между представлениями щелчком правой кнопки мыши по asmx-файлу. Представление разметки показывает единственную директиву WebService. Она означает, что файл Web-сервиса является указателем на код сервиса. Атрибут CodeBehind указывает на файл кода с именем WebService.asmx.cs; это файл выделенного кода, который находится в папке App_Code в Solution Explorer. Именно здесь находится логика сервиса. Наконец, в этой директиве используется атрибут Class для указания класса, содержащегося внутри WebService.asmx.cs; этот класс является Web-сервисом. Методы этого класса являются Web-методами.

На рис. 3 показано содержимое WebService.asmx.cs. Прежде всего обратите внимание на то, что этот класс является просто стандартным классом С# (он может быть также классом VB). В нем есть операторы using, определение класса, метод, а также некоторые атрибуты.  Модель программирования Web-сервисов .NET-разработчикам должна быть очень хорошо знакома.

Рис. 3. Код Web-сервиса

Конечно, вы должны дать знать .NET о том, что этот код — Web-сервис. Для этого есть два способа. В первом используются атрибуты. Класс WebService на рис. 3 помечен атрибутом WebService. Таким образом, класс определен как Web-сервис. Обратите также внимание, что метод HelloWorld имеет атрибут WebMethod. Этот атрибут указывает, что данный  метод является Web-методом, который может быть вызван для Web-сервиса.

Другой способ указать на класс как на Web-сервис — при помощи наследования. Класс наследует от System.Web.Services.WebService. На самом деле это не обязательно. Вы можете описать класс как Web-сервис без наследования от WebService. Однако при помощи этого наследования класс будет иметь полный доступ к таким функциональным возможностям ASP.NET, как объекты Session и Context. Доступ к этим объектам обеспечивает  разработчикам Web-сервисов многие хорошо знакомые функциональные возможности ASP.NET.

Создание Web-сервиса ASP.NET

Мы рассмотрели стандартные файлы Web-сервиса, создаваемые в Visual Studio при помощи шаблона Web-сервиса. Теперь вы готовы исследовать разработку реального Web-сервиса при помощи Visual Studio 2008. Для примера мы будем разрабатывать Web-сервис ExampleService.

Этот Web-сервис будет обеспечивать методы для получения информации из тестовой базы данных и для сохранения изменений этой информации. Вот основные шаги этого процесса:

  1.  Для создания Web-сервиса добавьте в шаблон ASP.NET Web Service Application новый Web-сервис. Назовем его ExampleService.asmx.
  2.  Удалим метод HelloWorld и вместо него создадим методы с названиями GetUsers, GetGroups, AddGroup и DeleteGroup. Каждый метод должен быть помечен  атрибутом [WebMethod].
  3.  Добавим в ваше решение новый проект библиотеки классов. Назовем этот проект ClassLibraryData. Данный проект будет содержать фактическое описание простых классов UserInfo и GroupInfo с набором свойств, а также DataSet-структуру для таблиц нашей БД. В листинге показан пример этого кода, а на рис. 4. структура DataSet, сгенерированная для
    нашей БД.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ClassLibraryData

{

   public class UserInfo

   {

       public string Group { get; set; }

       public string Login { get; set; }

       public string FirstName { get; set; }

       public string SecondName { get; set; }

       public string LastName { get; set; }

       public UserInfo()

       {

       }

   }

   public class GroupInfo

   {

       public int ID_Group { get; set; }

       public string Name { get; set; }

   }

}

  1.  Затем создадим второй проект библиотеки классов с названием ClassLibraryMethods и добавим эту библиотеку класс ServiceMethods. Пространство имен  ClassLibraryMethods обеспечит фактическую реализацию кода, который выполняется от имени Web-методов данного сервиса. Фактически сервис является прокси для методов сервисов. Реализация при помощи прокси не обязательна. Вы можете определить всю логику  выполнения прямо внутри Web-сервиса. Однако мы показываем именно такой пример по двум причинам. Первая состоит в том, что большинство приложений использует уже существующий код. Поэтому может быть весьма полезным создание прокси для  предоставления этого существующего кода через Web-сервисы. Вторая состоит в том, что это пример хорошего дизайна. Наличие кода реализации в отдельном объекте позволяет  использовать его многократно, облегчает модульное тестирование и позволяет применять более традиционные клиентские конфигурации (и не использовать Web-сервисы).

Рис.4. Структура DataSet.

  1.  Добавим ссылку в проекте ClassLibraryMethods на проект ClassLibraryData. Затем добавим методы GetUsers, GetGroups, AddGroup и DeleteGroup в класс ServiceMethods созданного вами проекта библиотеки классов ClassLibraryMethods. В листинге показан код, который работает с таблицами базы данных.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using ClassLibraryData;

namespace ClassLibraryMethods

{

   public class ServiceMethods

   {

       public List<UserInfo> GetUsers()

       {

           List<UserInfo> users = new List<UserInfo>();

           exampleDBDataSet dataset = new exampleDBDataSet();

           ClassLibraryData.exampleDBDataSetTableAdapters.GroupsTableAdapter groupsAdapter = new ClassLibraryData.exampleDBDataSetTableAdapters.GroupsTableAdapter();

           groupsAdapter.Fill(dataset.Groups);

           ClassLibraryData.exampleDBDataSetTableAdapters.UsersTableAdapter usersAdapter = new ClassLibraryData.exampleDBDataSetTableAdapters.UsersTableAdapter();

           usersAdapter.Fill(dataset.Users);

           users = (from item in dataset.Users

                    select new UserInfo()

                    {

                        FirstName = item.FirstName,

                        Group = item.GroupsRow.Name,

                        LastName = item.LastName,

                        Login = item.Login,

                        SecondName = item.SecondName

                    }

                   ).ToList<UserInfo>();

           return users;

       }

       public List<GroupInfo> GetGroups()

       {

           List<GroupInfo> groups = new List<GroupInfo>();

           exampleDBDataSet dataset = new exampleDBDataSet();

           ClassLibraryData.exampleDBDataSetTableAdapters.GroupsTableAdapter groupsAdapter = new ClassLibraryData.exampleDBDataSetTableAdapters.GroupsTableAdapter();

           groupsAdapter.Fill(dataset.Groups);

           groups = (from item in dataset.Groups

                     select new GroupInfo()

                     {

                         ID_Group = item.ID_Group,

                         Name = item.Name

                     }

                    ).ToList<GroupInfo>();

           return groups;

       }

       public void AddGroup(string name)

       {

           exampleDBDataSet dataset = new exampleDBDataSet();

           ClassLibraryData.exampleDBDataSetTableAdapters.GroupsTableAdapter groupsAdapter = new ClassLibraryData.exampleDBDataSetTableAdapters.GroupsTableAdapter();

           groupsAdapter.Insert(name);

       }

       public void DeleteGroup(int id_group)

       {

           exampleDBDataSet dataset = new exampleDBDataSet();

           ClassLibraryData.exampleDBDataSetTableAdapters.GroupsTableAdapter groupsAdapter = new ClassLibraryData.exampleDBDataSetTableAdapters.GroupsTableAdapter();

           groupsAdapter.DeleteQuery(id_group);

       }

   }

}

  1.  Класс ServiceMethods служит как прокси для Web-сервиса. Теперь добавим ссылку в проекте Web-сервиса на проекты ClassLibraryData и ClassLibraryMethods.
  2.  Последний шаг – написание кода для самого Web-сервиса. Здесь будет метод GetUsers, который возвращает список пользователей. Создам также метод GetGoups, который возвращает список групп пользователей. А также создадим методы AddGorup, который принимает name – название новой группы, и DeleteGroup, который принимает id_group – идентификатор удаляемой группы. В листинге показан код сервиса.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Services;

using ClassLibraryData;

using ClassLibraryMethods;

[WebService(Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.

// [System.Web.Script.Services.ScriptService]

public class ExampleService : System.Web.Services.WebService

{

   public ExampleService()

   {

       //Uncomment the following line if using designed components

       //InitializeComponent();

   }

   [WebMethod(Description="Получение списка пользователей")]

   public List<UserInfo> GetUsers()

   {

       ServiceMethods met = new ServiceMethods();

       return met.GetUsers();

   }

   [WebMethod(Description = "Полечение списка пользовательских групп")]

   public List<GroupInfo> GetGoups()

   {

       ServiceMethods met = new ServiceMethods();

       return met.GetGroups();

   }

   [WebMethod(Description = "Добавление группы")]

   public void AddGorup(string name)

   {

       ServiceMethods met = new ServiceMethods();

       met.AddGroup(name);

   }

   [WebMethod(Description = "Удаление группы")]

   public void DeleteGroup(int id_group)

   {

       ServiceMethods met = new ServiceMethods();

       met.DeleteGroup(id_group);

   }

}

Класс атрибута WebService

Класс атрибута WebService (называемый также WebServiceAttribute) можно использовать для предоставления дополнительных подробностей о данном Web-сервисе. Вы можете применить этот атрибут при объявлении класса Web-сервисом. Однако этот атрибут не обязателен. Он просто дает контекст Web-сервиса. Например, мы использовали атрибут WebService в объявлении класса ExampleService (для того чтобы предоставить подробности о пространстве имен Web-сервиса).

Вот описательные элементы, которые вы можете определить в классе атрибута WebService:

  •  Description – для определения описания Web-сервиса. Это описание будет предоставляться пользователям вашего Web-сервиса, а также указываться в соответствующей документации. Вам следует всегда предоставлять это описание;
  •  Namespace — используется для объявления пространства имен для вашего Web-сервиса (по умолчанию это tempuri.org). Это похоже на пространства имен внутри .NET. Однако эти пространства имен должны быть уникальными в Интернете. Поэтому здесь всегда нужно указывать только такое пространство имен, которое принадлежит вам и которым вы можете управлять. Например, это может быть интернет-адрес компании;
  •  Name — используется для определения другого названия для вашего Web-сервиса.  Название вашего Web-сервиса не определяется ограничениями наименований в .NET.  Поэтому вы можете использовать этот параметр для создания нового имени для вашего Web-сервиса.

Класс WebService

Класс WebService представляет собой базовый класс для Web-сервисов .NET. Его не надо путать с классом атрибута WebService (см. предыдущий раздел). Вы наследуете от этого класса для того, чтобы использовать объекты ASP.NET (такие как Session, Application, Context и т. д.). Однако делать это не обязательно. Visual Studio принудительно реализует такое наследование при описании вами нового Web-сервиса, но вы можете удалить этот код, если не собираетесь использовать в вашем Web-сервисе объекты ASP.NET. Если же вы решили наследовать от WebService, то вы получаете доступ к этим объектам ASP.NET точно так же, как и в любом другом Web-приложении.

Класс атрибута WebMethod

Класс атрибута WebMethod служит для указания того обстоятельства, что метод вашего сервиса должен предоставляться через Web-сервис. Это объявление обязательно для всех тех методов, которые вы хотите сделать доступными через Web-сервис.

При описании Web-метода вы можете настроить различные параметры. Они управляют тем, как работает Web-метод. Например, для указания описания метода необходимо настроить Параметр Description. Далее приведен более полный список параметров атрибута WebMethod.

  •  Description— используется для предоставления описания Web-метода. Это описание будет видно вызывающим клиентам, а также в документации по данному Web-методу.
  •  EnableSession— применяется для указания, нужно ли активировать состояния  сеансов для данного Web-метода. Установка его в значение True позволит вам сохранять и получать элементы в сеансе. Если вы настроите его в значение True и наследуете от WebService, то получите доступ к сеансу из объекта Session (WebService.Session). Если же вы не наследуете от WebService, то по-прежнему можете настроить этот  параметр в значение True. Однако для получения объекта сеанса вам придется пройти по всему пути HttpContext.Current.Session.
  •  CacheDuration— используется для указания, что результаты Web-сервиса должны кэшироваться в течение определенного промежутка времени. Для этого параметра вы устанавливаете длительность в секундах. Включение этого кэширования приведет к  кэшированию ответов для каждого уникального набора параметров, переданных в Web-сервис (аналогично кэшированию вывода в ASP.NET).
  •  MessageName— используется для определения алиаса или отдельного имени для  данного Web-метода. Эта возможность полезна в том случае, когда вам нужны перегруженные методы, которые поддерживаются в .NET, но не поддерживаются Web-сервисами. Таким образом, вы можете сохранить свои перегруженные методы и присвоить каждому из них уникальное имя при помощи этого параметра.
  •  BufferResponse — применяется для указания, следует ли весь ответ буферизировать в памяти сервера перед тем, как передавать его обратно по проводам вызывающему клиенту. Значение по умолчанию этого параметра— True. Если вы установите его в False, то ответ будет буферизироваться блоками по 16 Кбайт и передаваться клиенту по одному блоку.
  •  TransactionOption— используется для указания, должен ли Web-сервис быть корнем транзакции. По умолчанию Web-сервисы не могут участвовать в других транзакциях. Однако они могут вызывать объекты, которые участвуют в транзакции вместе с Web-сервисом.

Просмотр формального описания Web-сервиса

Visual Studio и .NET Framework позволяют вам просмотреть Web-сервис внутри Web-браузера. Эта возможность полезна как для тестирования Web-сервиса, так и для  исследования его работы (возвращаемых и требуемых им сообщений). Для доступа к Web-сервису вы сначала собираете (компилируете) его в Visual Studio, а затем запускаете asmx-файл в браузере.

На рис. 5 показан пример Web-сервиса ExampleService в окне браузера. Обратите  внимание, что все методы сервиса перечислены. Показано также описание каждого метода. Это то самое описание, которое было указано в определении Web-метода (WebMethodAttribute).

Рис. 5. Переход к Web-сервису в браузере.

Для того чтобы увидеть реальное формальное описание Web-сервиса на WSDL, вы можете выбрать ссылку Service Description (Описание службы) в верхней части страницы (рис. 5). Когда вы нажмете эту ссылку, то внутри QueryString в asmx-файл будет передан параметр WSDL. Это дает указание ASP.NET вернуть WSDL сервиса. WSDL будет сгенерирован. Он соответствует стандартам WSDL и поэтому может использоваться клиентами, которые хотят получить доступ к вашему сервису. Эти клиенты используют WSDL для того, чтобы понять, как работает ваш Web-сервис.

Просмотр Web-метода

Когда вы щелкаете по названию Web-метода (см. рис. 5), то ASP.NET генерирует для вас Web-форму для тестирования данного метода Web-сервиса. Доступ к этой форме можно получить через asmx-файл с параметром QueryString, равным ор (от англ. operation). Вы передаете в этот параметр название Web-метода. Например, рассмотрим Web-метод AddGroup. Эта Web-форма показана на рис. 6. Верхняя часть формы позволяет вам вводить параметры для Web-метода, а затем вызывать фактический Web-метод при помощи команды POST протокола HTTP. Этот протокол  является всего лишь одним из способов вызова Web-метода. Вспомните, что вы используете также и SOAP. На этой странице показаны реальные примеры запроса и ответа SOAP (так же, как и примеры HTTP). Эти примеры могут быть полезны в том случае, если вы хотите знать, как следует формировать сообщения для этих протоколов.

Использование Web-сервиса ASP.NET 

Web-сервис можно использовать при помощи любого клиента, который способен вызывать сервис и управлять его результатами. Visual Studio облегчает эту задачу. Она позволяет вам настроить сервисную ссылку на любой сервис. Этот процесс аналогичен настройке ссылки на другую библиотеку .NET или компонент СОМ. После описания такой сервисной ссылки Visual Studio генерирует локальный класс прокси для использования сервиса. Это позволяет вам программировать при помощи класса прокси и не беспокоиться о написании кода  сервиса. Служебные ссылки можно настроить внутри почти любого приложения .NET, в том числе Windows Forms, WPF, консольных приложений и т. д. Давайте же рассмотрим этот процесс.

Рис. 6. Web-метод AddGroup

Описание сервисной ссылки

Определите сервисную ссылку для вашего проекта при помощи выбора опции Add Service Reference (Добавить ссылку на службу) из контекстного меню данного проекта. При этом откроется диалоговое окно Add Service Reference (Добавить ссылку на службу). Используйте это диалоговое окно для перехода к сервису и добавления этого сервиса в качестве ссылки.

По сравнению с предыдущими версиями Visual Studio это диалоговое окно переделано. Оно объединяет все сервисные ссылки (включая Web-сервисы ASP.NET и созданные на основе WCF). На рис. 7 показан начальный экран диалогового окна Add Service Reference.

Рис. 7. Диалоговое окно «Добавить ссылку на службу»

Здесь вы можете ввести URI-адрес вашего сервиса или нажать кнопку Discover (Найти) для поиска уже существующих в вашем решении сервисов. После обнаружения сервисов их можно увидеть в списке слева. Вы можете выбрать интерфейс сервиса и увидеть в правой части его операции. В нижней части формы можно настроить пространство имен для вашей  сервисной ссылки. Этим определяется пространство имен, которое будет использовать Visual Studio при генерировании кода прокси для сервиса.

Нажатие кнопки Advanced (Дополнительно) в нижней части диалогового окна Add Service Reference (Добавить ссылку на службу) выдаст вам диалоговое окно Service Reference Settings (Настройка ссылок на службы) (рис. 8).

Рис. 8. Диалоговое окно «Настройка ссылок на службы»

Здесь вы можете управлять тем, как Visual Studio будет генерировать код вашего прокси — указать коллекции и область видимости методов вашего прокси (открытые или закрытые).

Обратите внимание на кнопку Add Web Reference (Добавить веб-ссылку) в нижней части окна Service Reference Settings. Она позволяет вам создать Web-ссылку в старом стиле (в стиле .NET 2.0). Пример показан на рис. 9. До введения WCF это был основной способ настройки сервисной ссылки (поскольку существовали только Web-сервисы). Это тоже приводит к  генерированию для вас прокси-класса, пространство имен которого определяется содержимым  текстового поля Web reference name (Имя веб-ссылки).

Возвратимся к примеру. Привяжем приложение Windows Forms с названием WindowsFormsApplicationExample к Web-сервису ASP.NET с названием ExampleService (который вы уже описали). Для этого примера предположим, что приложение Windows Forms будет  существовать независимо от сервиса (в отдельном процессе) и что Web-сервис будет  использоваться множеством разнородных клиентов.

Рис. 9. Диалоговое окно «Добавить веб-ссылку»

В нашем примере как приложение Windows Forms, так и сервис находятся в одном решении. Поэтому вы можете использовать диалоговое окно Add Service Reference и нажать кнопку Discover для поиска сервиса (рис. 7). Укажите в качестве пространства имен сервиса значение ServiceReferenceExample и нажмите кнопку ОК для того, чтобы закрыть  диалоговое окно и сгенерировать код для ссылки.

Теперь вы можете программировать прокси сервиса, который был сгенерирован для вас. Вы  можете также увидеть сгенерированный код. В Solution Explorer выберите опцию Show All Files.

Затем перейдите в каталог Service References. Здесь вы можете увидеть ссылку ServiceReferenceExample. На рис. 10 показано все это вместе с открытым в редакторе классом прокси сервиса. Класс прокси — это класс С#, который представляет сервис.  Назначение этого класса – инкапсуляция и абстрагирование подробностей вызова данного сервиса. Это позволяет разработчикам работать с сервисом точно так же, как они работают с любым другим компонентом или классом .NET. Класс прокси содержит методы (которые имитируют Web-методы) и объекты (которые используются для параметров — такие как объект UserInfo в данном примере).

Рис. 10. Web-ссылка

Вызов Web-сервиса

Вы можете вызвать Web-сервис точно так же, как и любой другой класс .NET. Эта возможность имеется благодаря классу прокси, который был для вас сгенерирован. Для этого сделаем ссылку на пространство имен ServiceReferenceExample, а затем создадим новый экземпляр класса ExampleServiceSoapClient:

ExampleServiceSoapClient cl = new ExampleServiceSoapClient();

Этот класс даст вам доступ к Web-методам GetUsers, GetGroups, AddGroup и DeleteGroup (через прокси). Для подключения этих методов к приложению WindowsFormsApplicationExample мы создадим форму, которая покажет список всех пользователей и групп пользователей, а также обеспечит возможность удаления и добавления групп пользователей. Это показано на рис. 11.

Рис. 11. Вкладка «Пользователи» WindowsFormsApplicationExample

При нажатии на кнопку «Загрузить» происходит создание экземпляра класса прокси, вызов Web-метода GetUsers и заполнение DataGridView:

private void button1_Click(object sender, EventArgs e)

{

ExampleServiceSoapClient cl = new ExampleServiceSoapClient();

    UserInfo[] users = cl.GetUsers();

    dataGridView1.Rows.Clear();

    foreach (UserInfo u in users)

    {

     dataGridView1.Rows.Add(new object[] { u.Group, u.FirstName, u.LastName, u.SecondName, u.Login });

}

}

Задание на лабораторную работу

  1.  Создать ASP.NET Web-сервис для взаимодействия с таблицами БД (аналогично приведенному в лабораторной работе примеру) согласно варианту в лабораторной работе №3.
  2.  Реализовать следующие Web-методы:
  •  Получение полного списка записей 1-й таблицы.
  •  Получение полного списка записей 2-й таблицы.
  •  Добавление новой записи во 2-ю таблицу.
  •  Удаление записи из 2-й таблицы.
  1.  Разработать Windows Form приложение, использующее вызовы всех Web-методов разработанного сервиса.

4*. На выбор:

  •  Вместо ASP.NET Web-сервиса реализовать WCF Web-сервис [2, глава 19].
    •  Вместо Windows Form приложения реализовать приложение Silverlight для работы с Web-сервисом [3].

Список рекомендуемой литературы

  1.  Нейген, Кристиан. C# и платформа .NET 3.0 для профессионалов.: Пер. с англ. / Кристиан Нейген, Билл Ивьен, Джей Глинн, Морган Скиннер, Карли Уотсон.  – М.: ООО «И.Д. Вильямс», 2008. – 1376+416 (на CD) с.
  2.  Снелл, М. Microsoft Visual Studio 2008 / Майк Снелл, Ларс Пауэрс.  – СПб: БХВ-Петербург, 2009. – 1200 с.
  3.  Работа с WebService в SilverLight 2 beta 2. – Режим доступа: http://silverlightru.net/rabota-s-webservice-v-silverlight-2-beta-2




1. Статья Изобразительное искусство Италии 15 века
2. Содержание
3. Внебиржевой первичный рынок ценных бумаг
4. тематических методов анализа экономики рук
5. Составить и рассчитать по формулам в MS EXCEL ведомость начисления заработной платы содержащую столбцы
6. Зацепление ведущих колес с гусеницами представляет собой один из наиболее важных и сложных узлов в констр
7. ТЕМА 17 ГОСПОДИН ВЕЛИКИЙ НОВГОРОД ПЛАН Введение 1
8. темами який не вимагає уніфікації змісту підготовки фахівців технологій навчання та системи забезпечення я
9. Довіреність у цивільному праві України
10. Государственное регулирование природопользования и охраны природной среды
11. Задание6 Отпечатать с помощью программы Word отрывок текста содержащий списки формулу и таблицу2
12. Мусульманской или
13. анализ- описание метода сущность задачи процедуры Метод качественноколичественно анализа содержания д
14. Реферат- К вопросу о судьбах древнерусских языческих традиций в XI в
15. Парадокс близнецов
16. Как же им это удаётся Как вообще можно извлекать такие звуки
17. Гражданские правоотношения2
18. другому В настоящей аппликации обязательно виден рельеф ветхнего слоя
19. Следовательно материальная ответственность непосредственно связана с трудовым правонарушением
20. ВВЕДЕНИЕ Во многих странах сегодня уделяется повышенное внимание совершенствованию структур нацеленных