ビジネス層に含まれる機能を WCF SOAP サービスを介して公開します。VS2008 を使用し、ビジュアル デザイン ツール ( XMLSpy ) を使用して XSD を記述し、 WSCF.blueを使用して WSDL を生成します。
私たちのスキーマの 1 つには、実質的にギザギザの配列があります。
<xs:element name="CriteriaGroups" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="CriteriaGroup" type="SearchCriterion" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
クライアントを生成すると、サービスへのすべての呼び出しが次のエラーで失敗します。
Unable to generate a temporary class (result=1) error CS0030: Cannot convert type 'SearchCriterion[]' to 'SearchCriterion'
ネット上の一般的な解決策は、次の行を次のように変更することReference.cs
です。
public SiDemSearchCriterion[][] CriteriaGroups
に:
public SiDemSearchCriterion[] CriteriaGroups
そして、そのプロパティとの間のすべての参照。
しかし、それは実行される可能性がありますが、機能しないため、役に立ちません。ほとんどのデータを破棄します。リストとしてすべてを行う設定は、何もしません。
スキーマを変更せずにこれを行う方法はありますか? これは私たちのスキーマなので、変更してもそれほど問題にはなりません。「Microsoftスキーマ」の方法で設計したくないだけです。
コントラクト (WSDL + XSD) セットは、プラットフォームに依存せず、一般的な標準に基づいていると想定されています。
そう:
- スキーマを変更せずに SVCUTIL で動作するクライアントを構築する方法はありますか?
- SVCUTIL ですぐにクライアントをビルドできるようにスキーマを変更するにはどうすればよいですか?