【发布时间】:2016-12-12 07:44:57
【问题描述】:
我即将在我的应用程序中集成第三方 SOAP 服务。我无法控制这项服务,我只有一堆 .xsd 文件、一个 wsdl 文件和一些示例响应。我正在使用默认方式在 Visual Studio 中生成代理客户端。我已将相同的 wsdl 与响应 xml 添加到 Soap UI。
问题是,当我在应用程序中收到响应时,其中一些值为空。通过将实现IEndpointBehavior and IClientMessageInspector 的类添加到服务客户端,我可以在方法AfterReceiveReply 中看到预期的xml 响应。代理对象中的某些值为空。
检查服务定义中的对象,我可以看到Order 属性标记在类型上。例如:
[System.Xml.Serialization.XmlElementAttribute(Order=1)]
public string name { .......
我的第一个想法是响应 xml 未包含所有预期元素,并且按照 .xsd 文件中所述的正确顺序。
查看相关的 .xsd 文件,元素定义如下:
<xs:element name="name" type="MyTypeHere" minOccurs="0">
<xs:annotation>
<xs:documentation>Some documentation</xs:documentation>
</xs:annotation>
</xs:element>
当标记为
时,此元素是否需要出现在响应中?minOccurs="0"
或者该值只会为空?出于显而易见的原因,我无法在此处发布 wsdl 或 .xsd 文件..
提前致谢。
【问题讨论】:
-
我不太确定你在问什么。真的有问题吗?
-
@CharlesMager 如果 xsd 中的元素标记为 minOccurs="0",是否需要在响应 xml 中?还是该值只是空的,但标签仍然存在?可以理解吗?谢谢。
-
minOccurs=0是不言自明的。元素需要出现的最小次数是 0。所以不,它不需要在响应中;它是可选的。 -
@CharlesMager 那么由 Visual Studio/svcutil 生成的 Order 属性会怎样?努力处理空值,但原始 xml 包含正确的值。