Лабораторная работа № 16-17

Создание Web- сервиса для использования его в качестве серверной части многопользовательского чата

1. Цель работы

Целью работы является освоение методики создания элементарных web – служб, для использования в создании полноценного web-сервиса.

2. Состав рабочего места

2.1. Оборудование: IBM-совместимый персональный компьютер (ПК).

2.2. Программное обеспечение: операционная система Windows, интегрированная оболочка Visual Studio 2005 с установленным компонентом Visual C#.

3. краткие теоретические сведения

Создание web-службы

Для реализации web-службы можно создать класс web-службы, который является производным от пространства имен System. Web. Services. WebService. Класс WebService обеспечивает доступ к объектам Application и Session:

Свойство WebService

Описание

Application

Context

Server

Session

User.

Получает объект HttpApplicationState для текущего запроса.

Получает объект HttpContext, в котором заключена информация, относящаяся к HTTP. С помощью этого объекта может быть прочитана информация в HTTP-заголовке.

Получает объект HttpServerutility. Этот класс обладает несколькими вспомогательными методами, которые позволяют зашифровывать и расшифровывать URL.

Получает объект HttpSessionState, который используется для сохранения некоторого состояния клиента.

Получает пользовательский объект, реализующий интерфейс iPrincipal. С помощью данного интерфейса есть возможность узнать имя пользователя и тип аутентификации

НЕ нашли? Не то? Что вы ищете?

Атрибут WebService

Подкласс класса WebService должен быть помечен атрибутом WebService.

Класс webServiceAttribute обладает следующими свойствами:

Свойство

Описание

Description

Name

Namespace

Описание web-службы, которое будет использовано в WSDL-документе.

Позволяет считывать или задавать название web-службы.

Позволяет считывать или задавать пространство имен XML для данной web-службы. По умолчанию используется значение http://tempuri. org, которое вполне подходит для нужд тестирования, однако перед тем как сделать службу общедоступной, это пространство имен должны быть изменено.

Атрибут WebMethod

Все методы, предоставляемые web-службой, должны быть помечены атрибутом

WebMethod. Web-служба может обладать и методами, которые не помечаются атрибутом WebMethod. Такие методы могут вызываться из web-методов, но при этом они не могут быть вызваны клиентом. Вызывать метод удаленным клиентам позволяет использование атрибута класса webMethodAttribute, при этом можно определять, должна ли осуществляться буферизация ответов, какова допустимая длина КЭШа и должно ли сохраняться состояние сеанса в виде именованных параметров. В следующей таблице перечислены свойства класса WebMethodAttribute.

Свойство

Описание

BufferResponse

CacheDuration

Description

EnableSession

MessageName

TransacionOption

Позволяет устанавливать или сбрасывать флажок, указывающий на необходимость

буферизации ответа. Значение по умолчанию — true. При сохранении ответа в буфере пользователю будет отправляться только полностью завершенный пакет.

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

Содержит описание, которое используется для создания help-страниц web-службы для будущих потребителей.

Логическое значение, определяющее, является ли доступным состояние сеанса. По умолчанию равно false; это означает, что свойство Session класса WebService не может быть использовано для сохранения состояния сеанса.

По умолчанию имени сообщения присваивается название метода.

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

По умолчанию используется значение Disabled.

Создание простой web-службы

Создадим простую web-службу с помощью Visual .

1. Создайте новый проект с помощью пункта меню File | New | Project и выберите шаблон Web Service. Присвойте проекту имя webservicesampie и нажмите кнопку ОК.

Автоматически создаваемые файлы

Ниже перечислены файлы, создаваемые программой-мастером:

• Как нам известно по предшествующим главам, файл Assemblylnfo. cs используется для хранения атрибутов модуля.

• Global. asax! запросы на запуск и на окончание приложения сеанса — точно такие же, как и для приложения Web Forms.

• В файле Servicei. asmx хранится класс нашей web-службы. Все web-службы могут быть идентифицированы по расширению. asmx. Файл, в котором содержится исходный код, носит название servicei. asmx. cs, поскольку в Visual используется код поддержки. Однако этот файл по умолчанию в Solution Explorer не является видимым, и, для того чтобы до него добраться, необходимо щелкнуть мышью на кнопке Show All Files (вывод всех файлов), расположенной на панели инструментов Solution Explorer. Мастер генерирует класс servicel, который является производным от класса System. Web. Services. WebService. В файле Servicel. asmx. es можно также увидеть некоторый образец кода, позволяющий представить себе, как должен кодироваться метод web-службы — он должен быть описан как общий и быть помечен атрибутом webMethod:

using Systembusing

System. Collections;

using ponentModel;

using System. Data;

using System. Diagnostics;

using System. Web;

using System. Web. Services; :

namespace WebServiceSampie

///<summary>

/// Краткое описание класса Servicel. ;

///</summary>

public class Servicel : System. Web. Services. WebService

// ПРИМЕР WEB-СЛУЖБЫ

// Используемая в качестве примера служба HelloWorId() возвращает строку

// Hello World,

//Для ее создания удалите; знаки комментария из последующих строк/

// сохраните файл и постройте проект

// Протестировать эту web-службу можно, нажав F5

// [WebMethod]

// public string HelloWorldO

// {

// return "Hello World";

//{

}

}

• web. config — это файл конфигурации для данного приложения. Можно изменять конфигурацию данного файла, настраивая трассировку, состояние сеанса и режим отладки.

• WebServiceSample. vsdisco — это файл обнаружения для данного приложения. XML-элемент <dynamicDiscovery> означает, что поиск web-служб будет осуществляться во всех директориях за исключением указанных в элементе <exciude>:

<?xml version-"1.0й?>

<dynamicDiscovery xmlns="urn:schemas-dynamicdiscovery:disco.2000">

<exclude path="_vti__cnf" />

<exclude path="_vti__pvt" />'

<exclude path="_vti_log" />

: <exclude path="_vti_script" />

<exclude path="_vti_txt11 />

<exclude path="Web References" />

</dynamicDiscovery> -

Добавление web-метода

Следующее, что необходимо сделать, это добавить некоторый метод в web-службу. Мы добавим в нее простой метод Reversestring (), который получает строку и возвращает клиенту перевернутую строку.

1. Добавьте Следующий КОД В файл Servicel. asmx. cs:

[WebMethod]

public string ReverseString(string message)

{

char[] arr = message. ToCharArray();

Array. Reverse(arr);

message = new string(arr);

return message;

}

Чтобы однозначно идентифицировать XML-элементы в создаваемом описании

web-службы, необходимо добавить пространство имен. Добавим атрибут webservice с пространство имен http://www. /webservices в класс Service"!. Можно использовать любую другую строку, которая идентифицирует XML-элементы уникальным образом. Так, например, можно использовать для этой цели URL-ссылку на

страницу вашей компании. Причем такая web-ссылка совершенно не обязательно должна существовать на самом деле; она просто используется для уникальной идентификации. Если вами используется пространство имен, которое основывается на web-адресе вашей компании, то почти наверняка можно гарантировать, что никакая другая компания не будет использовать то же пространство имен.

Если вы не задаете никакого пространства имен, то по умолчанию используется

пространство имен http://tempuri. org. Для целей обучения это пространство нас вполне устроит, однако никогда не следует устанавливать реально используемую web-службу с таким пространством имен.

2. измените пример следующим образом:

[WebService (Namespace=1!http: //www. wrox. c6m/webservices11)]

public class Servicel : System. Web. Services. WebService

{

3. Теперь можно откомпилировать проект.

Тестирование web-службы

Открыв файл Servicel. asmx в браузере (его можно запустить из Visual с помощью пункта меню Debug | Start Without Debugging), вы получите перечень всех методов выбранной web-службы. В данном случае, служба обладает только одним методом — ReverseString(). Выбор показаной на экране ссылки на метод ReverseString повлечет за собой переход в диалог, позволяющий проводить тестирование web-службы.

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

На этой странице мы также получаем информацию о том, как выглядят SOAP-вызовы, поступающие от клиента, и ответы, отправляемые сервером.

Нажав кнопку invoke, после того как в текстовое окно будет введен текст Hello web services', мы получим от сервера результат. Результат имеет тип string, и это — инверсирование введенной строки.

4. Порядок выполнения работы

Порядок выполнения работы:

1. Составить программу, которая будет представлять собой Web-сервис, используемый для серверной части многопользовательского чата по одному из вариантов, приведенных лабораторной работе № 10.

2. Ввести программу с клавиатуры с использованием Visual Studio 2005.

3. Отладить программу и запустить на выполнение.

5. Содержание отчета

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

6. Вопросы для самоконтроля

1. Каковы основные свойства класса WebService?

2. Что такое атрибут WebService и какими свойствами он обладает?

3. Для чего используется атрибут WebMethod?

4. Какие файлы создаются автоматически при создании Web-службы и за что они отвечают?

5. Для чего используется файл web. config?

6. Как осуществляется тестирование Web-службы?