9

私はサードパーティの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は変更に気付かなかったようです-上記の例外が発生しない限り、オブジェクトをシリアル化したり、サービスをインスタンス化したりすることはできません。何が欠けているか、間違っているのでしょうか。

4

2 に答える 2

7

私の質問のように XSD ファイルを変更する必要がありますが、同じフォルダー内の Reference.cs (または .vb) ファイルも変更する必要があります。[][] を [] (または () に置換します) () と () vb.net)。

私が行ったすべての読書で、両方を行うと答えた回答はありませんでした。

于 2012-05-15T09:24:55.300 に答える
5

そうです、これは WSDL ツールのバグです。バグを修正するには、生成されたファイルを開いて、「TestStarXML.wsStarService.VSOptionConflictSetType」の一部を「TestStarXML.wsStarService.VSOptionConflictSetType[]」に変更する必要があります。

実行すると、どれがどれであるかを簡単に見つけることができます。タイプを変更すると、サービスは正常に実行されます。

于 2012-05-15T08:24:55.650 に答える