Конфигурация и поддержка метаданных
В этом разделе описывается, как включить поддержку конфигурации и метаданных для привязки и элементов привязки.
Общие сведения о конфигурации и метаданных
В этом разделе обсуждаются следующие задачи, которые являются необязательными элементами 1, 2 и 4 в списке задач " Разработка каналов ".
включение поддержки файла конфигурации для элемента привязки.
включение поддержки файла конфигурации для привязки;
экспорт WSDL-кода и утверждений политики для элемента привязки;
определение вставляемых WSDL-кода и утверждений политики и настройка привязки или элемента привязки.
Сведения о создании пользовательских привязок и элементов привязки см. в разделе Создание привязок User-Defined и Создание элемента BindingElementсоответственно.
Добавление поддержки конфигурации
Проще всего это сделать с помощью образца средства конфигуратионкодеженератор , чтобы создать код конфигурации для привязок и элементов привязки.
Расширение класса BindingElementExtensionElementСледующий пример кода взят из примера Transport: UDP . Раздел UdpTransportElement - это элемент BindingElementExtensionElement, который предоставляет элемент привязки UdpTransportBindingElement к системе конфигурации. С помощью нескольких простых переопределений в образце определяется имя раздела конфигурации, тип элемента привязки и способ создания элемента привязки. Пользователи могут затем зарегистрировать раздел расширения в файле конфигурации следующим образом.
На расширение можно ссылаться из пользовательских привязок, чтобы использовать в качестве транспорта протокол UDP.
Добавление конфигурации для привязкиРаздел SampleProfileUdpBindingCollectionElement представляет собой StandardBindingCollectionElement<TStandardBinding,TBindingConfiguration> , который предоставляет SampleProfileUdpBinding системе конфигурации. Основная часть реализации делегируется классу SampleProfileUdpBindingConfigurationElement , наследуемому от класса StandardBindingElement. SampleProfileUdpBindingConfigurationElement Имеет свойства, соответствующие свойствам SampleProfileUdpBinding , и функциям, которые сопоставляются с ConfigurationElement привязкой. Наконец, метод OnApplyConfiguration в классе SampleProfileUdpBinding переопределяется, как показано в следующем образце кода.
Чтобы зарегистрировать этот обработчик в системе конфигурации, добавьте в соответствующий файл конфигурации следующий раздел.
Добавление поддержки метаданных для элемента привязки
Для интеграции канала в систему метаданных он должен поддерживать как импорт, так и экспорт политики. Это позволяет средствам, таким как средство служебной программы метаданных ServiceModel (Svcutil.exe) , создавать клиенты элемента Binding.
Добавление поддержки WSDLЗа экспорт и импорт адресов в метаданных отвечает элемент привязки транспорта. При использовании привязки протокола SOAP элемент привязки транспорта должен также экспортировать в метаданных правильный URI (универсальный код ресурса) транспорта. Следующий пример кода взят из примера Transport: UDP .
Экспорт WSDLЧтобы экспортировать сведения об адресации, UdpTransportBindingElement класс реализует System.ServiceModel.Description.IWsdlExportExtension интерфейс. IWsdlExportExtension.ExportEndpointМетод добавляет правильные сведения об адресации в порт WSDL.
Реализация метода UdpTransportBindingElement в элементе ExportEndpoint также экспортирует URI транспорта, когда конечная точка использует привязку SOAP:
Импорт WSDLЧтобы расширить систему импорта WSDL для обработки импорта адресов, добавьте в файл конфигурации Svcutil.exe следующую конфигурацию, как показано в файле Svcutil.exe.config:
При запуске Svcutil.exe существует два варианта обеспечить загрузку программой расширений импорта WSDL:
Укажите Svcutil.exe файла конфигурации с помощью/Свкутилконфиг: < File > .
добавить раздел конфигурации в файл Svcutil.exe.config, находящийся в том же каталоге, что и файл Svcutil.exe.
UdpBindingElementImporter Тип реализует System.ServiceModel.Description.IWsdlImportExtension интерфейс. Метод ImportEndpoint импортирует адрес из порта WSDL:
Добавление поддержки политикПользовательский элемент привязки может экспортировать утверждения политики в привязке WSDL для конечной точки службы, чтобы показать возможности этого элемента привязки. Следующий пример кода взят из примера Transport: UDP .
Экспорт политикиUdpTransportBindingElement Тип реализует System.ServiceModel.Description.IPolicyExportExtension , чтобы добавить поддержку для политики экспорта. В результате класс System.ServiceModel.Description.MetadataExporter включает элемент UdpTransportBindingElement при формировании политики для любой привязки, в которую он входит.
В методе IPolicyExportExtension.ExportPolicy добавьте утверждение для UDP и еще одно утверждение, если канал находится в режиме многоадресной рассылки. Это связано с тем, что режим многоадресной рассылки влияет на построение стека связи и, следовательно, должен быть согласован обеими сторонами.
Поскольку пользовательские элементы привязки транспорта отвечают за обработку адресов, реализация System.ServiceModel.Description.IPolicyExportExtension в элементе UdpTransportBindingElement должна также обрабатывать экспорт соответствующих утверждений политики WS-Addressing для указания используемой версии WS-Addressing.
Импорт политикиЧтобы расширить систему импорта политик, добавьте в файл конфигурации Svcutil.exe следующую конфигурацию, как показано в файле Svcutil.exe.config:
Затем мы реализуем интерфейс System.ServiceModel.Description.IPolicyImportExtension из зарегистрированного нами класса ( UdpBindingElementImporter ). В методе IPolicyImportExtension.ImportPolicy рассмотрим утверждения в соответствующем пространстве имен и обработаем те из них, которые предназначены для формирования транспорта и проверки того, является ли он многоадресным. Кроме того, удалим утверждения, обрабатываемые импортером, из списка утверждений привязки. И опять при запуске Svcutil.exe существует два варианта интеграции:
Укажите Svcutil.exe к файлу конфигурации с помощью/Свкутилконфиг: < File > .
добавить раздел конфигурации в файл Svcutil.exe.config, находящийся в том же каталоге, что и файл Svcutil.exe.
Добавление пользовательского импортера стандартной привязкиSvcutil.exe и тип System.ServiceModel.Description.WsdlImporter по умолчанию распознают и импортируют предоставляемые системой привязки. В противном случае привязка импортируется как экземпляр System.ServiceModel.Channels.CustomBinding. Чтобы Svcutil.exe и тип WsdlImporter могли импортировать привязку SampleProfileUdpBinding , тип UdpBindingElementImporter также выступает в качестве пользовательского импортера стандартной привязки.
Пользовательский импортер стандартных привязок реализует ImportEndpoint метод System.ServiceModel.Description.IWsdlImportExtension интерфейса для проверки System.ServiceModel.Channels.CustomBinding экземпляра, импортированного из метаданных, чтобы определить, может ли он быть создан конкретной стандартной привязкой.
Как правило, реализация пользовательского импортера стандартной привязки предусматривает проверку свойств импортированных элементов привязки на предмет того, что изменены только свойства, которые могли быть заданы стандартной привязкой, а все остальные свойства имеют значения по умолчанию. Простейшая стратегия для реализации импортера стандартной привязки - создать экземпляр стандартной привязки, распространить на экземпляр стандартной привязки свойства из элементов привязки, поддерживаемые стандартной привязкой, и затем сравнить элементы привязки из стандартной привязки с импортированными элементами привязки.