1

次の型定義を含むWSDLがあります。

...
<xsd:complexType name="OrderItem">
  <xsd:all>
    <xsd:element name="source" type="xsd:string" />
  </xsd:all>
</xsd:complexType>
<xsd:complexType name="OrderItems">
  <xsd:sequence>
    <xsd:element name="item" type="tns:OrderItem" maxOccurs="unbounded" />
  </xsd:sequence>
</xsd:complexType>
...

VS 2010でサービスをサービス参照として追加する場合、OrderItemsクラスにitemはタイプが。のプロパティが含まれますOrderItem[]。次に、SOAPリクエストが次のように生成されます。

...
<items>
  <OrderItem>
    <item>foo</item>
    <item>bar</item>
  </OrderItem>
</items>
...

XmlArrayおよびXmlArrayItem属性を使用して、<OrderItem>および<item>要素の名前をそれぞれ制御できますが、目的の構造に到達できません。

...
<items>
  <item>foo</item>
  <item>bar</item>
</items>
...

<xsd:restriction base="soap-enc:Array">WSDLが無制限のシーケンスではなくのようなものを指定した場合、この問題を回避できることを私は知っていますが、上記を考えると、カスタムシリアル化を使用する唯一の方法はありますか?

編集: https://gist.github.com/1422704のWSDLの例

4

1 に答える 1

1

.NET WCF サービスは、私たちの WSDL (SOAP ではなく XSD に重点を置いて手動で作成されたもの) ではうまく機能しないようです。

SOAP API を .NET で動作させる最も簡単な方法は、WSDL を変更して SOAP 配列型を使用すること<items>でしsoap-enc:Arraysoap-enc:arrayType="tns:OrderItem[]"

サービス参照の自動生成コードによって生成された結果の XML は、正しいものになります。

于 2012-02-15T00:52:39.273 に答える