Представляю вашему вниманию цикл статей, посвященный интеграции DIRECTUM со сторонними системами через web-сервисы.
Мы отправимся в увлекательное путешествие где мы начнем с создания своего сервиса, научимся размещать сервис на IIS, отлаживать сервис, настраивать безопасность, работать с БД, выполнять сериализацицию данных в XML, передавать бинарные данные и то, что возникнет
в моей голове по ходу написания статей этого цикла.
Статьи рассчитаны на самых не прокаченных читателей. Я попытаюсь рассказать все простым русским языком с основами, которых мне не хватало при изучении всего того о чем пойдет речь.
В данной статье сделаем первый шаг - научимся писать простейший web-сервис на основе WCF. Windows Communication Foundation (WCF) это микрософтовская программная платформа, входящая в состав .NET Framework, упрощающая создание сервис-ориентированных приложений.
Для начала определим базовые понятия WCF:
Адрес сервиса - ссылка (URL) по которому сообщение будет отправлено на сервис. Например, http://directum.com/WCFServices/HelloService.svc (<транспорт>://<сервер>/<путь до службы>.svc)
Привзяка (Binding) - набор настроек, которые детализируют настройки транспорта, шифрования, протокола для клиента который будет взаимодействовать с сервисом в определенной точке подключения (Endpoint). Примеры привязок: BasicHttpBinding, WSHttpBinding, NetTcpBinding.
Например, BasicHttpBinding по умолчанию использует HTTP транспорт для передачи сообщений SOAP 1.1, имеет значения по умолчанию для параметров receiveTimeout, sendTimeout, maxMessageSize и maxBufferSize.
Контракт (Contract) - набор спецификаций, которые определяют интерфейсы web-сервиса.
Сервисный контракт (service contract) - это интерфейс сервиса. Описывает, что сервис может выполнять.
Операционный контракт (operation contract) - часть сервисного контракта, который определяет параметры и типы возвращаемых значений набора операций. Может быть использован нативный тип данных параметра (integer, string и т.д.) или тип данных описанный в договоре
о типе данных сообщения (message contract).
Контракт сообщения (message contract) - тип данных, который описывается, если операционный контракт содержит сообщение, как параметр операции или возвращаемое значение.
Контракт данных (data contract) - это типы данных, используемы в Web-сервисе. Если используемые типы данных нативные, то описывать не обязательно.
Контракт ошибок (fault contract) - это описание возможных ошибок, которые могут вернуться клиенту сервиса.
Точка подключения (Endpoint) - места откуда сообщение отправляются или куда приходят. Точка подключения аккумулирует всю информацию для обмена сообщениями. У сервиса может быть одна или несколько точек подключения. Сервис может предоставить информацию для
обмена сообщениями в форме метаданных, по которым клиент сервиса сгенерирует соответствующую точку подключения и нужный формат сообщения. точка подключения имеет адрес, привязку и сервисный конракт.
Поведение (Behavior) - совокупность настроек которое конкретизирует поведение исходя из некоторых входных параметров.
Хостинг (Hosting) - сервис WCF не может существовать самостоятельно. Каждая служба WCF должна находиться под управлением некоторого процесса Windows, называемого хостовым процессом. Существуют варианты (мы рассмотрим IIS):
Автохостинг (то есть хост-процессом является, к примеру, консольное или графическое Windows приложение)
Хостинг в одной из служб Windows
Хостинг с использованием IIS (Internet Information Server) или WAS (Windows Activation Services)
Метаданные (Metadata) - метаданные сервиса описывают те характеристики сервиса, которые необходимо знать клиенту сервиса, чтобы взаимодействовать с ним. Метаданные, предоставляемые службой, включают в себя XML-документ контракта данных и WSDL-документ,
который описывает методы сервиса.
Для разработки web-сервиса на основе WCF нам понадобится
Microsoft .NET Framework 4.5.1
Microsoft Visual Studio 2008-2013 Ultimate, Premium, or Professional
Microsoft SQL Server 2012, 2008, 2005, or Express
Internet Information Server 7.0, 7.5, or 8.0
Windows 7 or Windows 8
Перейдем к делу.
Создадим новый проект
Открыть Visual Studio.
Создать новый пустой проект (Ctrl+Shift+N). Укажите имя и задайте расположение файлов.
Будет создан пустой проект.
Создать новую библиотеку класса (C#). Указать Имя и не менять расположение. Примечание: мы специально не используем шаблоны вида WCF Service Application.
Чтобы сделать WCF сервис необходимо добавить сборку System.ServiceModel. Для этого:
Правой кнопкой по References/Добавить ссылку
Перейти на платформу (Framework) и выбрать System.ServiceModel.
Теперь в обозревателе решений, развернув References вы увидите сборку System.ServiceModel в списке.
Опишем сервисный контракт
Контекстное меню на сервисе Добавить/Создать элемент.
Выбрать элемент "Интерфейс". Дать ему имя. Имя интерфейса обычно начинается с "I".
В проект добавился интерфейс, который мы будем использовать как интерфейс сервиса.
Добавить метод GetMessage в интерфейс. Этот метод имеет один параметр сроку, и возвращает строку. Перед методами добавляется предопределенный атрибут [OperationContract].
Указать что интерфейс будет публичным.
Получилось вот так:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;
namespace ARVIClubService
{
[ServiceContract]
public interface IARVIClubService
{
[OperationContract]
string GetMessage(string name);
}
}
Реализация сервисного контракта
Мы описали сервисный контракт, теперь нужно реализовать операцию/метод сервиса, который мы описали в сервисном контракте. Для этого мы используем тот пустой заготовленный VS для нас класс.
Сначала необходимо его переименовать. VS корректно заменит все необходимые ссылки при переименовании.
Далее:
Указать, что класс описывает интерфейс IARVIClubService. public class ARVIClubService:IARVIClubService
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ARVIClubService
{
public class ARVIClubService:IARVIClubService
{
public string GetMessage(string name)
{
return "Hello Club from " + name + "!";
}
}
}
И последнее: Если решение строится без ошибок, то все сделано правильно.
VS много что может готовить сама. Однако для того, чтобы пользоваться шаблонами нужно понимать из чего шаблон состоит. Большинство материалов в инете показывают как все просто, а понимания, "что там произошло после нажатия таких простых трех кнопок" не остается. А
т.к. я поставил целью объяснить самым не прокаченным читателям, то в серии статей я не буду намеренно пользоваться шаблонами, чтобы можно было понять "а как это внутри".
А что в них плохого, Артур? Почему не используем?
Отличная тема для освещения, пиши еще!
VS много что может готовить сама. Однако для того, чтобы пользоваться шаблонами нужно понимать из чего шаблон состоит. Большинство материалов в инете показывают как все просто, а понимания, "что там произошло после нажатия таких простых трех кнопок" не остается. А т.к. я поставил целью объяснить самым не прокаченным читателям, то в серии статей я не буду намеренно пользоваться шаблонами, чтобы можно было понять "а как это внутри".
Описано просто и доступно.
Авторизуйтесь, чтобы написать комментарий