SOAP и веб-сервисы XML на платформе .Net::Журнал СА 1.2008
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Дата-центры  

Дата-центры: есть ли опасность утечки данных?

Российские компании уже несколько лет испытывают дефицит вычислительных мощностей. Рост числа проектов,

 Читать далее...

Книжная полка  

Защиты много не бывает

Среди книжных новинок издательства «БХВ» есть несколько изданий, посвященных методам социальной инженерии

 Читать далее...

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

Обычно соответствие программного продукта требованиям мы проверяем через скоуп вполне себе понятных

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6414
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 7118
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4396
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 3086
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3882
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3897
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6385
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3234
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3530
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7364
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10726
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12445
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 14097
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9192
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7142
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5446
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4683
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3495
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3212
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3449
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 3090
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 SOAP и веб-сервисы XML на платформе .Net

Архив номеров / 2008 / Выпуск №1 (62) / SOAP и веб-сервисы XML на платформе .Net

Рубрика: Веб /  Веб

Алексей Бойко

SOAP и веб-сервисы XML на платформе .Net

Веб-сервисы XML предлагают такой уровень совместимости и взаимодействия в отношении операционных систем,

платформ и языков, который ранее был просто недоступен.

 

Эндрю Троелсен (обладатель титула MVP (Most Valuable Professional in Microsoft))

Если вы еще не работали с веб-сервисами XML, то наверняка слышали слово «SOAP». Настало время разобраться с этими понятиями.

Intro

Если вас интересует Интернет или сети поменьше, скорее всего рано или поздно вы столкнетесь с веб-сервисами XML. Веб-сервис XML – это не только веб-приложение, способное выводить информацию в браузер. Скорее это технология удаленного взаимодействия, позволяющая вызывать методы и свойства объекта в сети с помощью стандартных HTTP-запросов.

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

В качестве информационного «транспорта» между сервисом и клиентом можно использовать HTTP-методы GET или POST.

А можно «наложить» поверх еще один протокол – SOAP (Simple Object Access Protocol). Обычно так и поступают, так как в этом случае возможна передача сложных типов (включая пользовательские). А классические методы GET и POST поддерживают только перечни, простые массивы и строки.

Пример SOAP-взаимодействия

SOAP-сообщение – это XML-документ, помещенный в тело HTTP-запроса.

Листинг 1. Структура SOAP-сообщения

<?xml version="1.0" encoding="utf-8"?>

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://site.ru/">

  <soap:Header>

    <!-- Необязательная информация заголовков -->

  </soap:Header>

  <soap:Body>

    <!-- Информация вызова методов -->

  </soap:Body>

</soap:Envelope>

Взаимодействие клиента и сервиса происходит следующим образом:

  • клиент формирует SOAP-запрос и отправляет его сервису;
  • сервис на удаленном компьютере выполняет процедуру и отправляет SOAP-ответ.

Например, вот так может выглядеть SOAP-запрос, вызывающий метод HelloWorld() удаленного веб-сервиса XML:

Листинг 2. Пример SOAP-запроса

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://site.ru/">

   <soap:Header/>

   <soap:Body>

      <tem:HelloWorld/>

   </soap:Body>

</soap:Envelope>

Метод HelloWorld(), как и полагается, возвращает строку «Здравствуй, мир!»:

Листинг 3. Пример SOAP-ответа

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" \

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

   <soap:Body>

      <HelloWorldResponse xmlns="http://site.ru/">

         <HelloWorldResult>Здравствуй, мир!</HelloWorldResult>

      </HelloWorldResponse>

   </soap:Body>

</soap:Envelope>

Создание веб-сервиса XML на платформе .NET 2.0

Создать сервис можно различными способами, мы будем использовать Visual Studio 2005. Нажмите «File -> New -> Web Site», в раскрывшемся окне выберите «ASP.NET web Service». По указанному при создании адресу вы обнаружите следующие файлы и директории (см. рис. 1).

Рисунок 1. Структура веб-сервиса

Рисунок 1. Структура веб-сервиса

В принципе, сервис может содержать только один-единственный файл с расширением *.asmx. (Для обозначения веб-сервисов .Net используется расширение *.asmx.) В данном случае это не так, посмотрите содержимое файла Service.asmx:

Листинг 4. В Service.asmx определен внешний файл поддержки

<%@ WebService Language="C#" CodeBehind="~/App_Code/Service.cs" class="Service" %>

Атрибут CodeBehind указывает внешний файл, расположенный в папке App_Code, в котором размещен программный код, реализующий метод HelloWorld():

Листинг 5. Файл Service.cs, реализующий метод HelloWorld()

using System;

using System.Web;

using System.Web.Services;

using System.Web.Services.Protocols;

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

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

public class Service : System.Web.Services.WebService

{

    public Service () {

    }

    [WebMethod]

    public string HelloWorld() {

        return "Hello World";

    }

}

Возможно создать единственный файл Service.asmx без кода поддержки, обладающий теми же функциональными возможностями:

Листинг 6. Service.asmx без внешнего кода поддержки

<%@ WebService Language="C#" class="Service" %>

using System;

using System.Web;

using System.Web.Services;

using System.Web.Services.Protocols;

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

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

public class Service : System.Web.Services.WebService

{

    public Service () {

    }

    [WebMethod]

    public string HelloWorld() {

        return "Hello World";

    }

}

Нам это ни к чему, и так поступать мы не станем.

Как видите, единственный метод нашего веб-сервиса помечен атрибутом [WebMethod], информирующим среду выполнения ASP.NET о том, что этот метод доступен для поступающих HTTP-запросов. Не обозначенные таким атрибутом члены не будут доступны клиентским программам.

Для наших экспериментов вполне подходит такой простой сервис, осталось только опубликовать его.

Публикация веб-сервиса XML с помощью IIS

Речь пойдет не о публикации в Интернете, а о создании условий для тестирования нашего сервиса на локальном компьютере.

Первым делом установите IIS (Internet Information Server). Для этого откройте окно «Установка и удаление программ» и выберите в нем «Установка компонентов Windows». (Некоторые версии Windows не предполагают установку IIS, например Windows XP Home Edition.)

Примечание: сервер IIS лучше устанавливать раньше, чем .Net Framework, иначе придется настроить IIS на поддержку .Net-приложений с помощью запуска утилиты командной строки aspnet_regiis.exe (с флагом /i).

Создайте виртуальный каталог. Если вы используете Windows XP Pro, войдите в «Панель управления -> Администрирование -> Internet Information Services». В раскрывшемся окне выберите «Действие -> Создать -> Виртуальный каталог».

Будет запущен мастер создания виртуальных каталогов. Укажите в качестве псевдонима Soap1 и задайте путь к каталогу, в котором хотите разместить сервис, например C:\Soap1. Теперь скопируйте туда содержимое нашего веб-сервиса.

Наберите в адресной строке браузера http://localhost/soap1/Service.asmx, и вы должны увидеть страницу тестирования сервиса (см. рис. 2).

Рисунок 2. Страница тестирования веб-сервиса

Рисунок 2. Страница тестирования веб-сервиса

Просмотр SOAP-сообщений

Страница тестирования не позволяет отправлять и читать SOAP-сообщения. По этой причине придется воспользоваться сторонними разработками, я рекомендую использовать soapUI. (Это бесплатный продукт, доступный по адресу http://www.soapui.org.)

После установки soapUI создайте новый проект под наз-ванием soap1, оставив поле Initial WSDL пустым (см. рис. 3).

Рисунок 3. Создание проекта в soapUI

Рисунок 3. Создание проекта в soapUI

Правой кнопкой мышки щелкните на только что созданном проекте и выберите «Add WSDL from URL». В открывшемся диалоговом окне введите http://localhost/soap1/Service.asmx?wsdl. Теперь у нас есть возможность отправлять SOAP-запросы к нашему сервису и просматривать полученные ответы. (Запросы будут сгенерированы soapUI автоматически.)

Что же такое этот WSDL? Документ WSDL описывает возможности взаимодействия клиентов с веб-сервисом. Там описывается, какие методы сервиса доступны для внешнего вызова, какие параметры они принимают и что возвращают, а также прочая информация, необходимая для удаленного взаимодействия. Такой документ можно составить вручную, а можно доверить его генерацию серверу, для этого достаточно приписать суффикс ?wsdl к URL, указывающему на файл *.asmx.

Чтобы посмотреть WSDL-документ нашего сервиса, введите в браузере http://localhost/soap1/Service.asmx?wsdl. Информацию именно из этого документа использует soapUI для автоматической генерации SOAP-запросов.

SOAP Extensions

Как вы, наверное, заметили для создания веб-сервиса XML (как и клиента) не обязательно заботиться о виде SOAP-сообщений. Достаточно пометить нужные методы атрибутом [WebMethod], и среда выполнения ASP.NET сама составит пакеты нужного формата.

На рис. 4 показаны запрос и ответ веб-сервиса, полученные с помощью программы soapUI.

Рисунок 4. Запрос и ответ веб-сервиса, полученные с помощью программы soapUI

Рисунок 4. Запрос и ответ веб-сервиса, полученные с помощью программы soapUI

Повторим еще раз. Запрос сгенерирован soapUI – при создании реальных клиентов для сервиса тоже не требуется вручную форматировать SOAP-пакеты. В создании ответа сервиса мы также не принимали непосредственного участия. Все это происходит автоматически.

Однако вполне вероятно, что вам потребуется самостоятельно модифицировать эти пакеты. Например, произвести сжатие или шифрование передаваемых данных. В этом и есть назначение SOAP Extensions.

SOAP Extensions – это механизм, позволяющий произвольным образом изменять принимаемые и отправляемые SOAP-сообщения.

«Путь» SOAP-сообщения

Чтобы приступить к программированию, нужно рассмотреть путь, который проходит SOAP-сообщение, прежде чем оно будет получено и обработано соответствующим методом (см. рис. 5).

Рисунок 5. «Путь» SOAP-сообщения

Рисунок 5. «Путь» SOAP-сообщения

SOAP-сообщение можно рассматривать как XML-документ, описывающий передаваемый по сети объект. Перед тем как использовать переданный таким образом объект, его нужно восстановить (или, если хотите, собрать) из этого описания. Этой цели служит XML-сериализатор.

Входящие пакеты проходят десериализацию (восстановление объекта из XML-описания), а отправляемые сериализацию (создание XML-описания объекта).

На рис. 5 показаны четыре точки (BeforeSerialize, AfterDeserialize, BeforeDeserialize, AfterSerialize), в которых мы, с помощью SOAP Extensions, можем перехватить SOAP-сообщение. Модифицировать его и отправить дальше.

Реализация SOAP Extension

Для начала определимся с заданием: пусть мы хотим изменить отправляемые веб-сервисом SOAP-пакеты как показано в листинге 7:

Листинг 7. «Старый» и новый ответы web-сервиса XML

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" \

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

   <soap:Body>

      <HelloWorldResponse xmlns="http://tempuri.org/">

         <HelloWorldResult>Hello World</HelloWorldResult>

      </HelloWorldResponse>

   </soap:Body>

</soap:Envelope>

 

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" \

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

   <soap:Body>

      зашифрованный текст

   </soap:Body>

</soap:Envelope>

План действий для реализации SOAP Extension:

  • Создаем dll с классом, наследуемым от SoapExtension.
  • Добавляем к нашему веб-сервису папку bin и кладем туда созданную dll.
  • Добавляем к сервису файл web.config и вносим в него нужные изменения.

Роль папки bin и файла web.config рассмотрим позже.

Создание DLL c SOAP Extension

Создайте новый проект «Class Library» под названием SoapExtensionLib. В этом проекте потребуется реализовать только один класс, который будет выполнять необходимые нам модификации SOAP-пакетов. Этот класс должен быть наследованным от класса SoapExtension.

Листинг 8. Создание класса, наследуемого от SoapExtension

using System;

using System.Web.Services;

using System.Web.Services.Protocols;

using System.IO;

using System.Net;

using System.Xml;

public class TraceExtension : SoapExtension

{

}

Каждое SOAP Extension получает как параметр поток, содержащий передаваемый по сети объект (до или после сериализации). И обязано возвращать поток.

SOAP Extension можно представить как «врезку», которую можно поставить в одной или всех четырех точках (BeforeSerialize, AfterDeserialize, BeforeDeserialize, AfterSerialize), показанных на рис. 5. В каждой точке таких «врезок» может быть сколько угодно (см. рис. 6).

Рисунок 6. Представление SOAP extension как «врезки» в точках BeforeDeserialize и AfterSerialize

Рисунок 6. Представление SOAP extension как «врезки» в точках BeforeDeserialize и AfterSerialize

Для получения этих потоков используется метод ChainStream.

Листинг 9. Реализация метода ChainStream

public class TraceExtension : SoapExtension

{

    Stream wireStream;

    Stream appStream;

    // метод в качестве входного параметра

    // получает поток, содержащий передаваемый объект

    public override Stream ChainStream(Stream stream)

    {

        wireStream = stream;

        appStream = new MemoryStream();

        return appStream;

    }

    …

}

В точке BeforeDeserialize поток wireStream содержит принятый из сети SOAP-запрос. Этот SOAP-запрос нужно передать потоку приложения (потоку appStream).

А в точке AfterSerialize необходимо передать потоку wireStream отправляемый в сеть SOAP-ответ, который будет размещаться в appStream.

Для работы с потоками в каждой из четырех точек нужно реализовать метод ProcessMessage.

Листинг 10. Реализация метода ProcessMessage, не модифицирующего SOAP-сообщения

// ProcessMessage, выполняющий обязательное копирование

// потоков в двух точках (BeforeDeserialize и AfterSerialize)

public override void ProcessMessage(SoapMessage message)

{

    switch (message.Stage)

    {

        // в точке BeforeDeserialize необходимо передать

        // SOAP-запрос из потока сети (wireStream)

        // в поток приложения (appStream)

        case SoapMessageStage.BeforeDeserialize:

        Copy(wireStream, appStream);

        appStream.Position = 0;

        break;

        // в точке AfterSerialize необходимо передать

        // SOAP-ответ из потока приложения в поток сети

        case SoapMessageStage.AfterSerialize:

        appStream.Position = 0;

        Copy(appStream, wireStream);

        break;

    }

}

void Copy(Stream from, Stream to)

{

    TextReader reader = new StreamReader(from);

    TextWriter writer = new StreamWriter(to);

    writer.WriteLine(reader.ReadToEnd());

    writer.Flush();

}

Листинг 10 можно воспринимать как болванку для дальнейших экспериментов. В такой реализации метода ProcessMessage нет никакого смысла – исходящий SOAP-ответ никак не модифицируется. Исправим это:

Листинг 11. Реализация метода ProcessMessage, модифицирующего SOAP-ответ

public override void ProcessMessage(SoapMessage message)

{

    switch (message.Stage)

    {

        case SoapMessageStage.AfterSerialize:

        WriteOutput(message);

        break;

        // часть кода вырезана для экономии места

    {

{

// перепишем SOAP-ответ

public void WriteOutput(SoapMessage message)

{

    appStream.Position = 0;

    // создадим XML документ из потока

    XmlDocument document = new XmlDocument();

    document.Load(appStream);

    // Для использования XPath нужно определить

    // NamespaceManager

    XmlNamespaceManager nsmgr = new XmlNamespaceManager(document.NameTable);

    nsmgr.AddNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope/");

    // получим ссылку на узел <soap:Body>

    XmlNode ResultNode = document.SelectSingleNode("//soap:Body", nsmgr);

    // заменем содержимое узла

    ResultNode.InnerText = "зашифрованный текст";

    // очистим поток и запишем в него новый SOAP-ответ

    appStream.SetLength(0);

    appStream.Position = 0;

    document.Save(appStream);

    // ОБЯЗАТЕЛЬНОЕ ДЕЙСТВИЕ

    // передадим SOAP-ответ из потока приложения (appStream)

    // в поток сети (wireStream)

    appStream.Position = 0;

    Copy(appStream, wireStream);

}

Далее нужно определить два метода (один из которых является перегруженным, т.е. может вызываться с разными наборами параметров), которые в нашем случае не нужны. Однако мы обязаны определить их в соответствии с правилами наследования от класса SoapExtension.

Листинг 12. Другие обязательно реализуемые методы

// В соотвествии с правилами наследования мы обязаны

// определить эти методы, однако мы их никак не используем

public override object ?

    GetInitializer(LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute)

{

    return null;

}

public override object GetInitializer(Type WebServiceType)

{

    return null;

}

public override void Initialize(object initializer)

{

    return;

}

Всё, компилируем проект. Наконец-то мы получили dll с SOAP Extension. Полный листинг SoapExtensionLib.dll находится на сайте журнала www.samag.ru в разделе «Исходный код».

Настройка веб-сервиса для работы с SOAP Extension

Опять откройте проект нашего веб-сервиса XML с помощью Visual Studio. Нажмите «WebSite -> Add Reference» и выберите созданный ранее SoapExtensionLib.dll.

К проекту автоматически будет добавлена папка Bin. На файлы *.dll, расположенные в папке Bin, приложение ссылается автоматически.

Теперь положите в директорию веб-сервиса файл Web.Config следующего содержания:

Листинг 13. Файл Web.Config

<?xml version="1.0"?>

<configuration>

    <appSettings/>

    <connectionStrings/>

    <system.web>

    <!--

    Весь тект этого файла, за исключением

    секции webServices, сгенерирован атоматически

    -->

    <webServices>

      <soapExtensionTypes>

        <add type="TraceExtension,SoapExtensionLib"

          priority="1"

          group="0" />

      </soapExtensionTypes>

    </webServices>

 

           <compilation debug="true"/>

           <authentication mode="Windows"/>

    </system.web>

</configuration>

Теперь структура нашего сервиса выглядит так, как показано на рис. 7.

Рисунок 7. Структура веб-сервиса

Рисунок 7. Структура веб-сервиса

С помощью файла Web.Config мы информируем среду ASP.NET о том, что мы добавили к веб-сервису XML Soap Extension, реализованное в классе TraceExtension который расположен в файле SoapExtensionLi.dll.

Листинг 14. Секция webServices в файле Web.Config

<webServices>

    <soapExtensionTypes>

      <add type="TraceExtension,SoapExtensionLib"

          priority="1"

          group="0" />

    </soapExtensionTypes>

</webServices>

Как вы уже знаете, можно сделать множество SOAP Extension, и поток, несущий в себе передаваемый объект (до или после сериализации), будет проходить через каждое из них. Порядок прохождения потоком различных SOAP Extension задается с помощью атрибутов priority и group.

Стоит отметить, что сконфигурировав данным способом Web.Config, мы информируем среду о том, что наше SOAP Extension будет вызываться для каждого метода сервиса, помеченного атрибутом [WebMethod]. Существует возможность создать свой атрибут и помечать им только те методы, для которых нужно вызвать SOAP Extension.

Листинг 15. Пример использования собственного атрибута

[WebMethod]

[MyExtension]

public string HelloWorld() {

    return "Hello World";

}

Для этого требуется добавить в SoapExtensionLi.dll класс, наследованный от SoapExtensionAttribute (см. рис. 8).

Рисунок 8. Просмотр результата в soapUI

Рисунок 8. Просмотр результата в soapUI

Заключение

В данной статье отражены основные моменты построения и функционирования веб-сервисов XML на платформе .Net. Я надеюсь, что изложенного материала будет вполне достаточно, чтобы при необходимости вы смогли заняться более глубоким изучением темы.


Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru