Вопрос

Я часами пытался внести некоторые изменения в генерацию wsdl, но безрезультатно. Я застрял в основном из-за того, что не мог найти четкого примера того, чем я хочу заниматься (возможно, я что-то пропустил).

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

Я хочу проанализировать OperationContract и при необходимости сгенерировать дополнительный xsd.

Мои вопросы:

  • Как добавить или перехватить существующее поколение WSDL, без добавления атрибутов ?
  • Как настроить этот компонент в файле конфигурации?

Я не хочу изменять способ использования метаданных в svcutil.exe , просто добавляю "на лету" ComplexType в сгенерированный wsdl.

Спасибо за ваши предложения!

Это было полезно?

Решение

Что вам нужно, так это реализовать код IWsdlExportExtension.ExportContract, но в документации четко сказано:

<цитата>

Вызывается метод ExportContract когда система экспорта метаданных экспорт контракта. Только договор и операционное поведение, реализующее IWsdlExportExtension получить Вызов ExportContract. Все поведения реализация IWsdlExportExtension get вызов ExportEndpoint.

Для меня это означает, что этот метод вызывается только тогда, когда реализуется контрактом или операционным поведением, которое обычно определяется настраиваемым атрибутом, но вы также должны иметь возможность назначать это поведение при настраиваемой инициализации. Вот пример расширения WSDL для конечной точки, настроенной из файла конфигурации (конфигурация предлагает только поведение для всей службы и конечных точек). Я считаю (но не тестировал), что вы можете сделать подобное расширение, которое будет состоять из:

  • Операция или поведение контракта реализуют IWsdlExportExtension и ExportContract.
  • Поведение конечной точки, которое будет реализовывать IEndpointBehavior и ApplyDispatchBehavior. В ApplyDispatchBehavior вы будете использовать serviceEndpoint.Contract.Behaviors для добавления поведения контракта или serviceEndpoint.Contract.Operations[x].Behaviors для добавления поведения операции.
  • Вы создадите аналогичный кодовый код-код для определения поведения вашей новой конечной точки из файла конфигурации.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top