Программирование >>  Программирование с использованием ajax 

1 ... 377 378 379 [ 380 ] 381 382 383 ... 396


Здесь атрибут bindingCon figuration в элементе <endpoint> полностью отсутствует, а это значит, что клиент будет использовать стандартную конфигурацию привязки.

Для изучения WCF-служб, однако, такая тщательность инструмента Add Service Reference является довольно-таки полезной. Она позволяет увидеть все параметры, которые входят в состав стандартной привязки WSHtttpBinding. О конфигурировании WCF-служб очень уж подробно в этой главе рассказываться не будет, но зато уже не трудно заметить, что некоторые из параметров, вроде настроек тайм-аута, являются довольно легкими для понимания благодаря своим явным именам.

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

□ Что касается определения Web-служб:

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

реализуются службы в классе, который реализует представляющий контракт службы интерфейс;

контракты данных представляют собой просто определения типов, в которых используются атрибуты контрактов данных;

□ Что касается конфигурирования WCF-служб:

для конфигурирования WCF-служб можно использовать конфигурационные файлы (Web. conf ig или арр. conf ig);

□ Что касается хостинга WCF-служб на Web-сервере:

при хостинге на Web-сервере в роли базовых адресов служб используются адреса их . svc-файлов;

□ Что касается конфигурирования клиентов WCF-служб:

для конфигурирования клиентов WCF-служб тоже можно использовать конфигурационные файлы (Web. conf ig или арр. conf ig).

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

Определение контрактов для служб WCF

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

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

Контракты данных для службы определяются за счет применения к определению класса атрибута Dat aCont г act At tribute. Этот атрибут находится в пространстве имен System. Runtime. Serialization. Конфигурировать его можно с помощью свойств, перечисленных в табл. 35.2.

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

У каждого члена класса, который является частью контракта данных, должен обязательно быть атрибут DataMemberAttribute, который тоже находится в пространстве имен System.Runtime. Serialization. Свойства, доступные для конфигурирования этого атрибута, перечислены в табл. 35.3.



Таблица 35.2. Свойства атрибута DataContractAttribute

Свойство

Предназначение

Name

Namespace

Присваивает контракту данных имя, отличное от того, что используется для определения класса. Именно это имя будет применяться в SOAP-сообщениях и клиентских объектах данных, создаваемых на основе метаданных службы

Задает пространство имен, которое должно использоваться вместе с данным контрактом в SOAP-сообщениях

Таблица 35.3. Свойства атрибута DataMexnberAttribute

Свойство

Предназначение

Name

IsRequired Order

EmitDefaultValue

Задает имя члена данных при сериализации (по умолчанию используется имя члена)

Указывает, должен ли данный член присутствовать в SOAP-сообщении

Принимает значение mt, задающее порядок сериализации или десериализации члена, что может быть необходимо в случае, когда присутствие одного члена является обязательным для понимания другого члена. Члены с более низкими значениями Order будут обрабатываться первыми

Установка для этого свойства значения false позволяет предотвращать включение членов в SOAP-сообщения в случае, если их значение совпадает со значением по умолчанию

Контракты служб

Контракты служб определяются путем применения к определению интерфейса атрибута System. ServiceModel. ServiceContractAttribute. Настраивать такие контракты можно с помощью свойств, перечисленных в табл. 35.4.

Таблица 35.4. Свойства атрибута ServiceContractAttribute

Свойство

Предназначение

Name

Namespace

ConfigurationName

HasProtectionLevel

ProtectionLevel SessionMode

CallbackContract

Задает имя контракта службы в соответствии с тем, как указано в элементе

<portType> в WSDL

Задает пространство имен для контракта службы в соответствии с тем, как указано в элементе <portType> в WSDL

Имя контракта службы в том виде, в котором оно используется в конфигурационном файле

Определяет то, имеются ли у используемых службой сообщений явно определенные уровни защиты. Уровни защиты позволяют подписывать (или подписывать и шифровать) сообщения

Используемый уровень защиты сообщений

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

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



Контракты операций

Контракты операций определяются в виде членов-операций внутри интерфейсов, определяющих контракты по службам, путем применения атрибута System. ServiceModel .OperationContractAttribute. Свойства, доступные для настройки этого атрибута, перечислены в табл. 35.5.

Таблица 35.5. Свойства атрибута OperationContractAttribute Свойство Предназначение

Name Задает имя операции службы. По умолчанию используется имя члена

isOneWay Указывает на то, возвращает ли данная операция какой-то ответ. В случае

установки для этого свойства значения true клиенты не будут ожидать завершения операции, прежде чем продолжить работу

AsyncPattern Установка для этого свойства значения true позволяет реализовать опера-

цию в виде двух методов - Вед 1п<имя метода> и End<имя мeтoдa> - и затем использовать их для вызова этой операции асинхронным образом

HasProtectionLevel См. предыдущий раздел

ProtectionLevel См. предыдущий раздел

isinitiating В случае применения режима сеансов это свойство определяет то, может

ли вызов данной операции приводить к запуску нового сеанса

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

Action В случае применения режима адресации (представляющего собой усовер-

шенствованную возможность служб WCF) с операцией ассоциируется определенное действие, имя которого можно задавать с помощью данного свойства

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

ответного действия операции

Контракты сообщений

в приведенном ранее примере контракты сообщений не использовались. При желании применять их нужно определить класс, представляющий сообщение, и указать для него атрибут MessageContractAttribute, а для его членов - атрибуты Message BodyMemberAttribute, MessageHeaderAttribute или MessageHeaderArrayAttribute. Все эти атрибуты находятся в пространстве имен System. ServiceModel. Желание определять такие контракты может возникать только при острой необходимости в наличии очень высокого уровня контроля над SOAP-сообщениями, которые используются WCF-службами, поэтому более детально они здесь рассматриваться не будут.

Контракты неполадок

При наличии определенного типа исключения, например, специального исключения, которое требуется сделать доступным для клиентских приложений, можно применять к операции, которая может генерировать такое исключение, атрибут System. ServiceModel. FaultContractAttribute. Такой подход не часто используется при обычной работе с WCF.



1 ... 377 378 379 [ 380 ] 381 382 383 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика