В WCF нет поддержки.Даже если вы выполняете реальный контракт первым и пишете контракт сообщения вручную, когда wcf генерирует классы из вас wsdl + xsd, он будет игнорировать значение maxOccurs, если оно больше 1. Поэтому, когда вы предоставляете сервис, сгенерированный контракт снова будет иметьmaxOccurs="unbounded"
.
Однако вы можете легко изменить это поведение, реализовав настраиваемое поведение конечной точки, реализующее IWsdlExportExtension, IEndpointBehavior
интерфейсы:
- Создание классов из контракта(wsdl + xsd)
- Скопируйте файлы контракта в папку в проекте хоста службы
- Добавьте поведение конечной точки в конечную точку службы
- В классе поведения конечной точки заменитеимпортированные сгенерированные схемы с вашими реальными xsd
Таким образом, сгенерированные контракты будут включать ваши исходные схемы вместо сгенерированных.
Кроме того, вам нужно будет проверить XML-файл с вашими xsd,Потому что WCF не будет проверять ваши maxOccurs
атрибуты.