调用Web服务时如何处理minoccurs =“0”?

时间:2010-10-06 14:31:49

标签: c# xml web-services soap wsdl

我正在尝试使用大型机集成产品(DataDirect Shadow z / Services)调用Web服务,但我的问题更多的是一般性的。我想知道如何定义一个定义为minOccurs =“0”的元素。我正在调用的第三方服务上的操作有一个complexType元素,其中的所有元素都标记为minOccurs =“0”。

来自WSDL的示例

<xs:element minOccurs="0" name="Request">
    <xs:complexType>
        <xs:sequence>
            <xs:element minOccurs="0" name="startDate" type="xs:dateTime"/>
            <xs:element minOccurs="0" name="endDate" type="xs:dateTime"/>
            <xs:element minOccurs="0" name="requestId" type="tns:ObjectName"/>
            <xs:element minOccurs="0" name="reasonCode" type="xs:string"/>
            <xs:element minOccurs="0" name="actionType" type="xs:string"/>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="option" type="xs:string"/>
            <xs:element minOccurs="0" name="comments" type="xs:string"/>
            <xs:element minOccurs="0" name="Name" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

此服务在另一端的工作方式,如果将值传递给服务,即使它为空或空白或默认,该值也将在第三方系统上更新。 我需要一种方法来将有效负载中的元素OMIT转换为服务。这一般是如何处理的?我已经尝试使用C#作为此服务的客户端,但我唯一可以找到它们提供的是非基本类型的Specified后缀变量,但没有找到省略原始类型的方法。如果我通过简单POST将SOAP消息发送到第三方服务器来调用此Web服务,我可以简单地省略XML以获取我不想传递的值,但我只是想知道不同的Web服务客户端实现方式处理这个。

如果有帮助我相信第三方正在使用Apache Axis,并表示他们可以省略可选参数。

2 个答案:

答案 0 :(得分:0)

当您尝试使用与默认/可选arg缺失相关的xml部分进行POST时,您是否注意到服务器(apache轴)侧的该arg有任何更新?如果你这样做了,那么可能是如何为该WSDL实现服务器端逻辑的问题(不严格遵守WSDL定义的契约/模式)。

答案 1 :(得分:0)

我使用过第三方Web服务,要求您为所有具有Specified参数的可用标记传递值。只要您设置Specified=false

,就可以在那里传递任何内容

通常你会得到你的原始类型Specified标签以及int, bool, double这样的处理类型是一个问题,因为他们已经定义了默认值而没有设置{{1 }} tag将导致这些值默认为其默认定义值。