私はサードパーティのWebサービスにデータを送信するように依頼されました。サードパーティは、Javaクライアントで動作することが証明されているテストサービスを提供していますが、.Netにはありません。
サービスプロキシを生成し、サービスをインスタンス化するか、リクエストオブジェクトをシリアル化すると、次のエラーが発生します。
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[]'
このサービスを送ってくれたサードパーティはJavaを使用しており、テストサービスからサービスプロキシを生成するのに問題はありませんでした。これまでの私の理解では、WSDLファイルのXSDを生成する.Net(ここを参照)にバグがあります。
ここでの回答では、生成されたXSDをダミー属性で変更することに言及しているため、提案されているようにダミー属性を追加しました。
<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>
達成されたダミー属性を追加する唯一のことは、プロジェクトのコンパイル時間を数分から数秒に短縮することでした。
これ以外に、VS2008は変更に気付かなかったようです-上記の例外が発生しない限り、オブジェクトをシリアル化したり、サービスをインスタンス化したりすることはできません。何が欠けているか、間違っているのでしょうか。