Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Технология WCF.docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
471 Кб
Скачать
☆

Создание клиента

Наконец пришло время создать клиент нашего сервиса. В качестве клиента может выступать абсолютно любое приложение, но для простоты мы опять создадим консольного клиента. Создайте еще одно консольное приложение. Теперь вы должны запустить хост вашего сервиса. IIS остается запущеным постоянно, а консольное приложение вам придется запустить самому. Причем сделать это нужно не из Visual Studio, а вручную. В Solution Explorer щелкните правой кнопкой мыши на проекте вашего клиента и в контекстном меню выберите пункт Add Service Reference:

В появившемся окне укажите адрес вашего сервиса и нажмите кнопку Go:

В окне Services должно появиться описание вашего сервиса, все его контракты, а в окне Operations вы можете изучать методы вашего сервиса. Укажите удобное вам пространство имен для классов клиента в поле Namespace и нажмите кнопку Ok. Visual Studio сама добавит в сборку ссылки на необходимые библиотеки, создаст классы клиента и конфигурационный файл. На первый взгляд конфигурационный файл получается довольно большим, но это только потому, что Visual Studio прописывает значения всех параметров. Его можно сократить до следующего вида:

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

<configuration>

<system.serviceModel>

<client>

<endpoint

address="http://localhost:3491/SimpleService.svc"

binding="wsHttpBinding"

contract="ServiceReference.IFirstService" />

</client>

</system.serviceModel>

</configuration>

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

Теперь наш клиент готов к использованию. Давайте посмотрим, какие же именно классы создала Visual Studio для нашего клиента. Для этого в Solution Explorer нажмите кнопку Show All Files

В проекте вашего клиента разверните папки Service References – ServiceReference – Reference.svcmap и откройте файл Reference.cs. Здесь вы можете увидеть файл класса клиента. Как видите, в простейшем случае класс клиента весьма невелик. В принципе, вы можете создать его и вручную, не прибегая к Add Service Reference. Фактически в данном файле содержится только описание контрактного интерфейса, аналогичного тому, что определен на стороне сервиса, интерфейса канала и самого класса клиента, наследующего ClientBase. Ничего сложного. Теперь попробуем воспользоваться нашим клиентом:

FirstServiceClient client = new FirstServiceClient();

string result = client.GetSomeMessage(123);

Как видите, работа с клиентом весьма проста. Просто создайте его класс и вызывайте его методы.

Вот и все ваш первый WCF-сервис готов.

Контракты данных

Как уже говорилось, WCF создан на основе некоторого межотраслевого стандарта. Этот стандарт описывает, как должен производиться обмен простейшими типами данных: числами, строками, булевскими значениями. Однако для серьезных приложений этого недостаточно. Необходимо иметь возможность передавать клиенту сложные типы данных. Описание такого сложного типа в понятной WCF форме называется контрактом данных. Хорошая новость заключается в том, что создание контракта данных мало чем отличается от создания обычного класса.

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

[DataContract]

public class ServiceData

{

[DataMember]

public int ID { get; set; }

[DataMember]

public string Name { get; set; }

[DataMember]

public bool IsMarried { get; set; }

}

Как видите, отличие от обычного класса заключается только в наличии аттрибутов DataContract и DataMember. Первый из них определяет, что класс должен передаваться через механизмы WCF, а второй отмечает те свойства класса, которые должны передаваться на сторону клиента.

Теперь мы можем добавить нашему сервису метод, возвращающий этот новый тип:

[OperationContract]

ServiceData GetComplexData();

Еще одной приятной особенностью WCF является то, что после того, как мы изменили сервис нам ничего не требуется менять в его хостах. Все изменения будут доступны клиентам автоматически после перезапуска хоста. А вот файлы клиента необходимо обновить, поскольку он еще ничего не знает о новом методе и типе, возвращаемом им. Для этого запустите хост как было описано ранее, в Visual Studio щелкните правой кнопкой мыши на значке сервиса ServiceReference и их контекстного меню выберите пункт Update Service Reference:

Вот и все. Теперь вы можете использовать новые возможности вашего сервиса. Если вы откроете файл описания клиента Reference.cs, то увидите в нем описание вашего нового типа данных. Работа с ним на стороне клиента так же проста:

ServiceData data = client.GetComplexData();

Console.WriteLine("'{0}': {1}, Is married: {2}", data.ID, data.Name, data.IsMarried);