Как правильно изменить сгенерированный XSD для устранения известной ошибки .Net, которая вызывает исключение «cs0030: невозможно создать временный класс»
Мне было поручено отправить данные стороннему веб-сервису, он предоставил тестовый сервис, который, как было доказано, работает с Java-клиентом, однако его нет в .Net.
Когда я генерирую прокси службы и создаю экземпляр службы или сериализую объект запроса, я получаю следующую ошибку:
<code>Unable to generate a temporary class (result=1). error CS0030: Cannot convert type 'TestStarXML.wsStarService.VSOptionInclusiveSetType[]' to 'TestStarXML.wsStarService.VSOptionInclusiveSetType' error CS0030: Cannot convert type 'TestStarXML.wsStarService.VSOptionConflictSetType[]' to 'TestStarXML.wsStarService.VSOptionConflictSetType' error CS0030: Cannot convert type 'TestStarXML.wsStarService.ColorRequirementSetType[]' to 'TestStarXML.wsStarService.ColorRequirementSetType' error CS0030: Cannot convert type 'TestStarXML.wsStarService.ColorExclusionSetType[]' to 'TestStarXML.wsStarService.ColorExclusionSetType' error CS0029: Cannot implicitly convert type 'TestStarXML.wsStarService.VSOptionInclusiveSetType' to 'TestStarXML.wsStarService.VSOptionInclusiveSetType[]' error CS0029: Cannot implicitly convert type 'TestStarXML.wsStarService.VSOptionConflictSetType' to 'TestStarXML.wsStarService.VSOptionConflictSetType[]' error CS0029: Cannot implicitly convert type 'TestStarXML.wsStarService.ColorRequirementSetType' to 'TestStarXML.wsStarService.ColorRequirementSetType[]' error CS0029: Cannot implicitly convert type 'TestStarXML.wsStarService.ColorExclusionSetType' to 'TestStarXML.wsStarService.ColorExclusionSetType[]' </code>
Сторонние поставщики, которые отправили нам этот сервис, используют Java, и у них не возникло проблем при создании прокси-сервера сервиса из тестового сервиса. Насколько я понимаю, есть ошибка в .Net (посмотреть здесь) создание XSD для файла WSDL.
В ответВотв нем упоминается об изменении сгенерированного XSD с помощью фиктивных атрибутов, поэтому я добавил атрибут dummy, как было предложено:
<code><xs:complexType name="VSInclusivesOptionType"> <xs:sequence> <xs:element minOccurs="0" maxOccurs="unbounded" name="VSOptionInclusiveSet" type="tns:VSOptionInclusiveSetType" /> </xs:sequence> <xs:attribute name="tmp" type="xs:string" /> <!-- this is all I have added (for each of the types in the exception message) --> </xs:complexType> <xs:complexType name="VSOptionInclusiveSetType"> <xs:sequence> <xs:element minOccurs="0" name="SetID" type="ns2:IdentifierType" /> <xs:element minOccurs="0" name="NumberOfOptionsNumeric" type="xs:decimal" /> <xs:element minOccurs="0" maxOccurs="unbounded" name="VSOption2" type="tns:VSOption2Type" /> </xs:sequence> </xs:complexType> </code>
Единственное, что было добавлено, - это сокращение времени компиляции проекта с минут до секунд.
Кроме этого, VS2008, похоже, не заметил изменений - я все еще не могу сериализовать объект или создать экземпляр службы без получения исключения, упомянутого выше, что я пропустил или сделал неправильно?