Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Привязки и элементы привязки (объекты, расширяющие System.ServiceModel.Channels.Binding и System.ServiceModel.Channels.BindingElement, соответственно) — это место, где модель приложения Windows Communication Foundation (WCF) связывается с фабриками каналов и прослушивателями каналов. Без привязок для использования пользовательских каналов требуется программирование на уровне канала, как описано в разделе "Программирование Channel-Level службы" и "Программирование клиента Channel-Level". В этом разделе обсуждаются минимальные требования для активации использования вашего канала в WCF, разработка компонента BindingElement для вашего канала и включение возможности использования из приложения, как описано на шаге 4 в разделе «Разработка каналов».
Обзор
Создание BindingElement для вашего канала позволяет разработчикам использовать его в приложении WCF. BindingElement Объекты можно использовать из System.ServiceModel.ServiceHost класса для подключения приложения WCF к каналу, не имея точных сведений о типе канала.
BindingElement После создания можно включить дополнительные функциональные возможности в зависимости от ваших требований, выполнив остальные действия по разработке каналов, описанные в разделе "Разработка каналов".
Добавление элемента привязки
Чтобы реализовать пользовательский BindingElement, напишите класс, наследующий от BindingElement. Например, если вы разработали ChunkingChannel, который может разбить большие сообщения на блоки и восстановить их на другом конце, вы можете использовать этот канал в любой привязке, реализуя BindingElement и настраивая привязку для его использования. Оставшаяся часть этого раздела использует ChunkingChannel как пример, чтобы продемонстрировать требования к реализации элемента привязки.
A ChunkingBindingElement отвечает за создание ChunkingChannelFactory и ChunkingChannelListener. Он переопределяет реализации CanBuildChannelFactory и CanBuildChannelListener, и проверяет, ли параметр типа является IDuplexSessionChannel (в нашем примере это единственная форма канала, поддерживаемая ChunkingChannel) и что другие элементы привязки поддерживают эту форму канала.
BuildChannelFactory Сначала проверяет, можно ли создать запрашиваемую форму канала, а затем получает список действий сообщения, которые будут разделены на части. Затем он создает новый ChunkingChannelFactory, передавая его внутренней фабрике каналов. (Если вы создаете элемент привязки транспорта, этот элемент является последним в стеке привязки и поэтому должен создать прослушиватель каналов или фабрику каналов.)
BuildChannelListener имеет аналогичную реализацию для создания ChunkingChannelListener и передачи его внутреннему прослушивателю канала.
В качестве другого примера использования транспортного канала, пример Transport: UDP предоставляет следующее переопределение.
В данном примере элемент привязки — это UdpTransportBindingElement, который является производным от TransportBindingElement. Он переопределяет следующие методы для создания фабрик, ассоциированных с каналом.
public IChannelFactory<TChannel> BuildChannelFactory<TChannel>(BindingContext context)
{
return (IChannelFactory<TChannel>)(object)new UdpChannelFactory(this, context);
}
public IChannelListener<TChannel> BuildChannelListener<TChannel>(BindingContext context)
{
return (IChannelListener<TChannel>)(object)new UdpChannelListener(this, context);
}
Он также содержит элементы для клонирования BindingElement и возврата нашей схемы (soap.udp).
Элементы привязки протокола
Новые элементы привязки могут заменить или расширить любой из включенных элементов привязки, добавив новые транспорты, кодировки или протоколы более высокого уровня. Чтобы создать элемент привязки BindingElement протокола, начните с расширения класса. Как минимум, необходимо реализовать BindingElement.Clone и реализовать ChannelProtectionRequirements, используя IChannel.GetProperty. Это возвращает ChannelProtectionRequirements для этого элемента привязки. Дополнительные сведения см. в разделе ChannelProtectionRequirements.
Clone должен возвращать новую копию этого элемента привязки. В качестве наилучшей практики рекомендуется, чтобы авторы элементов привязки реализовывали Clone, используя конструктор копирования, который вызывает базовый конструктор копирования, а затем клонирует все дополнительные поля в этом классе.
Элементы привязки транспорта
Чтобы создать новый элемент привязки транспорта, расширьте интерфейс TransportBindingElement. Как минимум, необходимо реализовать Clone метод и TransportBindingElement.Scheme свойство.
Clone — возвращает новую версию этого элемента привязки. Рекомендуется, чтобы авторы элементов Binding реализовали Clone с помощью конструктора копирования, который вызывает базовый конструктор копирования, и затем клонирует любые дополнительные поля в этом классе.
Scheme — свойство Scheme get возвращает схему URI для транспортного протокола, представленного элементом привязки. Например, System.ServiceModel.Channels.HttpTransportBindingElement и System.ServiceModel.Channels.TcpTransportBindingElement возвращают "http" и "net.tcp" из своих соответствующих свойств Scheme.
Элементы привязки кодирования
Чтобы создать новые элементы привязки кодировки, начните с расширения BindingElement класса и реализации System.ServiceModel.Channels.MessageEncodingBindingElement класса. Как минимум, вы должны реализовать методы Clone, MessageEncodingBindingElement.CreateMessageEncoderFactory и свойство MessageEncodingBindingElement.MessageVersion.
Clone. Возвращает новую копию этого элемента привязки. В качестве наилучшей практики рекомендуется, чтобы авторы элементов привязки реализовывали Clone, используя конструктор копирования, который вызывает базовый конструктор копирования, а затем клонирует все дополнительные поля в этом классе.
CreateMessageEncoderFactory. MessageEncoderFactoryВозвращает объект, который предоставляет доступ к фактическому классу, реализующему ваш новый кодировщик и который должен расширятьMessageEncoder. Дополнительные сведения см. в разделах MessageEncoderFactory и MessageEncoder.
MessageVersion. Возвращает используемый в этой кодировке MessageVersion, который представляет используемые версии SOAP и WS-Addressing.
Полный список необязательных методов и свойств для пользовательских элементов привязки кодировки см. в разделе MessageEncodingBindingElement.
Дополнительные сведения о создании нового элемента привязки см. в статье Создание User-Defined Bindings.
После создания элемента привязки для канала вернитесь в раздел " Разработка каналов ", чтобы узнать, нужно ли добавить поддержку файла конфигурации в элемент привязки, если и как добавить поддержку публикации метаданных и как создать определяемую пользователем привязку, использующую элемент привязки.