|
Программирование >> Программирование с использованием ajax
Здесь атрибут 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.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |