WCF, wsHttpBinding и wsp:policy

Я использую привязку .NET 4.0, WCF и wshttp для создания некоторых методов ws. Причина использования привязки wsHttp заключается в том, что мне нужна поддержка аутентификации, шифрования и подписи.

Когда я создаю такую ​​службу и заглядываю в wsdl, я вижу, что там есть тег wsp:policy. Есть ли способ как-то повлиять на конфигурацию WCF и удалить этот тег?

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


person buhtla    schedule 24.11.2010    source источник


Ответы (1)


Вы можете заменить сгенерированный WSDL своим собственным WSDL (serviceMetadata — externalMetadataLocation) . Я уверен, что это единственный способ добиться желаемого, потому что вы будете писать WSDL с нуля. Существуют точки расширения для модификации сгенерированного WSDL и политик — IWsdlExportExtension и IPolicyExportExtension, но Я думаю, вы сможете только добавлять новые элементы в WSDL, но не удалять элементы, добавленные функциями API (встроенная безопасность и т. д.).

Кстати. ИМХО, очень плохая идея удалять политики, потому что WSDL должен описывать службу, и это должно быть единственное описание, которое необходимо разработчику для создания клиентского приложения. Если вы удалите политики, ваш WSDL будет охватывать только частичную информацию о вашей службе и станет бесполезным. Однозначно у вас будет тормозить совместимость с инструментами генерации прокси. У меня был связанный вопрос по этой теме.

person Ladislav Mrnka    schedule 24.11.2010
comment
Привет, Ладислав, 10 раз за ответ. Единственная причина этого в том, что мой WS будет использоваться некоторыми системами Java, у которых могут возникнуть проблемы из-за этого тега. Я учту ваше замечание и постараюсь сохранить этот тег как часть моего определения wsdl. Один связанный с этим вопрос: могу ли я использовать атрибут externalMetadataLocation для определения пути к определениям XSD или только для wsdl? - person buhtla; 24.11.2010
comment
На XSD ссылаются из WSDL, поэтому вам не нужно указывать их путь в конфигурации. Вы укажете его в WSDL. - person Ladislav Mrnka; 24.11.2010
comment
интересно (относительно), что сейчас 2015 год, и у меня все еще есть потребители Java с проблемами из-за этого тега. Если это не может использоваться таким большим количеством клиентов, я бы очень хотел, чтобы MS предоставила способ его удалить. - person hal9000; 12.08.2015