Могу ли я включить пользовательские атрибуты в автоматически сгенерированные классы WCF? - PullRequest
1 голос
/ 07 июля 2011

У меня WSDL-первый подход к созданию веб-сервисов. По сути, это означает, что у меня есть созданная вручную версия того, как я хочу, чтобы мой сервис выглядел, и затем сгенерирую службу WCF с помощью svcutil.

Этот WSDL содержит много полезной информации, такой как minOccurs, maxOccurs, ограничения (regexp) и т. Д. Однако эта информация полностью теряется при получении автоматически сгенерированных классов.

Можно ли каким-либо образом записать эту информацию в аннотации (будь то "стандартный" .net или пользовательский) для свойств, чтобы я мог выполнить проверку объектов после их десериализации?

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

Ответы [ 2 ]

1 голос
/ 07 июля 2011

Делая ссылки "minOccurs, maxOccurs, ограничения (regexp) и т. Д." В вашем вопросе, создается впечатление, что вы в основном заинтересованы в сериализации содержимого элемента wsdl: types в качестве классов контракта данных при сохранении метаданных XSD. В этом случае вы можете попробовать инструмент командной строки XSD.EXE для генерации классов из извлеченных XSD из типов WSDL. Я не знаю, как утилита XSD применяет метаданные / ограничения XSD (если вообще), но даст вам больший контроль над структурой классов, чем классы на основе DataContractSerializer, сгенерированные SvcUtil.

UPDATE: .NET XmlSerializer поддерживает маркировку классов minOccurs и другими атрибутами , но эта функциональность была частью оригинальных веб-сервисов на основе ASMX. Я считаю, что XmlSerializer будет по-прежнему уважать эти атрибуты, даже если они были предназначены для использования в ASMX (YMMV).

1 голос
/ 07 июля 2011

Да, вы можете перевести любую информацию из WSDL в код, но необязательно использовать svcutil.Если вы сталкиваетесь с ограничениями, которые поддерживает svcutil, вы можете рассмотреть другой механизм генерации кода, например шаблоны T4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...