2

OK、明らかに私はここで何か間違ったことをしています。Webサービスを作成しようとしていますが、「dateShipped」をオプションにしたいのですが、WSDLではminOccurs="0"が必要です。

[Serializable]
[XmlType]
public class CTShipment
{
    [XmlElement(Order = 0, IsNullable=false)] public CTDeliveryMethod DeliveryMethod;
    [XmlElement(Order = 1, IsNullable=false)] public CTShipmentAddress ShipmentAddress;
    [XmlIgnore] public bool dateShippedSpecified;
    [XmlElement(Order = 2, IsNullable=false)] public DateTime dateShipped;
}

次のようにWSDLを生成したいと思います。

<xs:complexType name="CTShipment">
  <xs:annotation>
     <xs:documentation>All details for the shipment of a suborder.</xs:documentation>
  </xs:annotation>
  <xs:sequence>
     <xs:element name="DeliveryMethod" type="CTDeliveryMethod" nillable="false"/>
     <xs:element name="ShipmentAddress" type="CTShipmentAddress" nillable="false"/>
     <xs:element name="dateShipped" type="xs:dateTime" nillable="false" minOccurs="0"/>
  </xs:sequence>
</xs:complexType>

代わりに、私が実際に得ているのはこれです:

<xs:complexType name="CTShipment">
  <xs:sequence>
     <xs:element name="DeliveryMethod" nillable="true" type="tns:CTDeliveryMethod"/>
     <xs:element name="ShipmentAddress" nillable="true" type="tns:CTShipmentAddress"/>
     <xs:element name="dateShipped" type="xs:dateTime"/>
     <xs:element name="dateShippedSpecified" type="xs:boolean"/>
  </xs:sequence>
</xs:complexType>

私が読んだいくつかのことによると(http://msdn.microsoft.com/en-us/library/zds0b35c%28v=vs.90%29.aspxを含む)、パブリックブール「dateShippedSpecified」を含めて「dateShipped」にする必要がありますオプション(minOccurs = 0)。ご覧のとおり、これが発生していないだけでなく、「[XmlIgnore]」でマークされていても「dateShippedSpecified」がWSDLに表示されています。別の問題もあることに気付いたかもしれません。「IsNullable=false」を指定していても、WSDLでnillable="true"が返されます。

それは4つ以上の問題です。同じことに関するすべてを説明することはできません。

  1. WSDLでminOccursを0に設定するにはどうすればよいですか?

  2. [fieldName]指定のパターンで[fieldName]がオプションにならないのはなぜですか(minOccurs = 0)?

  3. ___指定されたパターンに従わなかった場合でも、XmlIgnoreでマークされている場合、dateShippedSpecifiedがWSDLに表示されるのはなぜですか?

  4. 「IsNullable=false」を指定しているのに、すべてがnillable = "true"としてマークされているのはなぜですか?

    そしてボーナス質問として、誰かが知っているなら...

  5. 注釈(以下に示す)を含めるにはどうすればよいですか?

    <xs:annotation>
     <xs:documentation>All details for the shipment of a suborder.</xs:documentation>
    </xs:annotation>
    
4

2 に答える 2

2

これは.net実装のバグです。

W3C仕様(wsdlの場合)によれば、minOccurs="0"をシーケンス内で使用できます。「<シーケンス>」とは、0回以上出現する順番の要素を意味します。

たとえば、wsdlの公式のW3C定義を見てください:http ://www.w3.org/TR/wsdl

次のような要素が表示されます。

<sequence>
         <element ref="wsdl:documentation" minOccurs="0"/>
 </sequence>

今のところ、.Net互換である必要がある場合は、DateTimeを提供するnillable = "true"を使用しますか?(null許容バージョン)DateTimeの代わりに。

于 2014-05-30T17:24:51.357 に答える
1

これはSequence要素によるものです。これは、すべての要素がminOccurs = 1であることを指定します。また、WSDLは、順序を指定したため、「All」ではなくSequence-Elementを使用します。これには、すべての値が存在する必要があります。

したがって、注文を削除すると、すでに機能するはずです。あなたが本当に注文を必要とするならば、あなたがその価値を除外する方法がないより。

于 2013-05-30T13:37:22.073 に答える