gpt4 book ai didi

c# - 使用 "Specified"模式在 WSDL 中设置 minOccurs=0 不起作用

转载 作者:行者123 更新时间:2023-11-30 22:20:50 24 4
gpt4 key购买 nike

好吧,显然我在这里做错了什么。我正在尝试创建一个网络服务,我希望“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 ),包括公共(public) bool “dateShippedSpecified”应该使“dateShipped”可选(minOccurs=0)。如您所见,这不仅没有发生,而且“dateShippedSpecified”出现在 WSDL 中,即使它被标记为“[XmlIgnore]”。您可能已经注意到还有另一个问题:即使我指定了“IsNullable=false”,我在 WSDL 中仍然得到 nillable="true"。

这不少于 4 个问题,我无法解释所有与同一件事相关的问题:

  1. 如何在我的 WSDL 中将 minOccurs 设置为 0?

  2. 为什么 [fieldName]Specified 模式没有使 [fieldName] 可选 (minOccurs = 0)?

  3. 即使它不遵循 ___Specified 模式,如果 dateShippedSpecified 标记为 XmlIgnore,为什么它会出现在 WSDL 中?

  4. 为什么所有内容都标记为 nillable="true",即使我指定了“IsNullable=false”?

    作为奖励问题,如果有人知道...

  5. 如何获取要包含的注释(如下所示)?

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

最佳答案

这是由于序列元素。它指定每个元素都有 minOccurs= 1。并且 WSDL 使用序列元素而不是“全部”,因为您为它们指定了一个顺序。这要求每个值都存在。

所以当您删除订单时它应该可以正常工作。如果您真的需要订单,那么您将无法遗漏该值。

关于c# - 使用 "Specified"模式在 WSDL 中设置 minOccurs=0 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14779767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com