Очистка атрибутов KnownType во время генерации кода SvcUtil и WSDL

У меня есть служба WCF с конечной точкой mex для метаданных. Я использую SvcUtil через Visual Studio для генерации кода контрактов на данные клиента (C #) во время работы службы. SvcUtil добавляет атрибуты KnownType для унаследованных и ссылочных типов. У меня есть настраиваемый преобразователь контрактов данных, и я не использую эти известные типы. Как я могу заставить SvcUtil или WSDL Importer не помечать все эти типы атрибутами KnownType? Мой худший сценарий - просмотреть файл после генерации кода и удалить эти атрибуты, но я надеюсь, что есть более чистый способ сделать это.


person LadderLogic    schedule 08.08.2018    source источник
comment
Вы используете ServiceKnownTypeAttribute в исходном коде WCF? ?   -  person RobV8R    schedule 21.08.2018
comment
Да, я использую атрибут ServiceKnownTypeAttribute на стороне службы   -  person LadderLogic    schedule 21.08.2018
comment
Обычно я бы рекомендовал отказаться от серверных ServiceKnownTypeAttributes. В этом случае я не уверен, как это повлияет. Ниже я предложил альтернативное решение.   -  person RobV8R    schedule 21.08.2018


Ответы (1)


Один из вариантов - добавить известные типы в файл конфигурации. Файл конфигурации не обязательно должен быть вашим app.config (или web.config). Это можно было бы назвать dummy.config.

При запуске svcutil.exe добавьте следующий параметр /svcutilConfig:dummy.config. Когда клиентский код сгенерирован, ваши атрибуты KnownType должны исчезнуть.

Вот еще один пример регистрация известных типов с помощью файла конфигурации.

person RobV8R    schedule 20.08.2018
comment
Спасибо. Я пытаюсь удалить из поколения только атрибуты известного типа, сохраняя при этом объявленные типы. Из файла конфигурации я мог бы очистить объявленные типы, но я не могу очистить известные типы, если я вручную не напишу каждый объявленный тип, а затем очищу их соответствующие известные типы, что невозможно. Если я что-то здесь не упустил ... - person LadderLogic; 21.08.2018
comment
На самом деле я как раз думал об этом. Вам придется вручную создать (и поддерживать) файл конфигурации. Один из вариантов - создать шаблон T4 на основе метаданных WCF. Это не серебряная пуля, но я думаю, что она отвечает на ваш первоначальный вопрос. - person RobV8R; 21.08.2018
comment
Вы нашли альтернативное решение? - person RobV8R; 22.08.2018
comment
к сожалению, не изящный. В настоящее время придерживается очистки кода после генерации. - person LadderLogic; 22.08.2018