Вопрос по .net, exception, web-services, visual-studio-2008 – Как правильно изменить сгенерированный XSD для устранения известной ошибки .Net, которая вызывает исключение «cs0030: невозможно создать временный класс»

9

Мне было поручено отправить данные стороннему веб-сервису, он предоставил тестовый сервис, который, как было доказано, работает с 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, похоже, не заметил изменений - я все еще не могу сериализовать объект или создать экземпляр службы без получения исключения, упомянутого выше, что я пропустил или сделал неправильно?

@dcbyers Я реализовал вышеуказанные изменения для всех 4 типов. Mr Shoubs
Просто контрольный вопрос, так как похоже, что вы реализовали именно то решение, которое рекомендовано в ссылках. Возможно ли, что проблема с VSInclusivesOptionType решена, и вы сейчас работаете с вложениями других (3) типов данных, указанных в сообщении об ошибке? (VSOptionConflictSetType; ColorRequirementSetType; ColorExclusionSetType)? dcbyers

Ваш Ответ

2   ответа
7

как в моем вопросе, но вы также должны изменить файл Reference.cs (или .vb) в той же папке - я нашел замену [] [] на [] (или () () с () в vb.net).

Во всех прочитанных мною чтениях не было сказано ни одного ответа, так что я просто упустил момент - надеюсь, этот ответ поможет другим.

Спасибо за этот вопрос и ответ. Здесь в 2016 году ошибка все еще существует :)
5

это ошибка в инструменте WSDL. Чтобы исправить ошибку, вы должны открыть сгенерированные файлы и изменить некоторые из & lt; TestStarXML.wsStarService.VSOptionConflictSetType & apos; to "a TestStarXML.wsStarService.VSOptionConflictSetType []".

При запуске вы можете легко найти, какие из них. Когда вы изменили типы, ваш сервис будет работать нормально.

reference.cs - это файл, или, если вы сгенерировали вручную (инструмент wsdl), вы должны отредактировать выходной файл. Я не уверен, нужно ли вам добавлять или удалять []. Как я правильно помню, это было в строке определения класса.
Какой файл я должен редактировать? Mr Shoubs
Похоже, что (как вы можете видеть) в файле нет []. То есть это не случай их простого удаления? Mr Shoubs
Спасибо пэр, ты привел меня к ответу, так что +50 Mr Shoubs

Похожие вопросы