【问题标题】:DataContractSerializer, xsd and response xmlDataContractSerializer、xsd 和响应 xml
【发布时间】: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 包含正确的值。

标签: c# xml soap xsd wsdl


【解决方案1】:

不要担心空值。只要他们填写了您需要的值,您就可以开始了。

有时他们需要一种类型的响应来响应所有类型的请求。他们倾向于添加其他请求类型不需要的字段。

【讨论】:

  • 空值必须有值,它们出现在原始 xml 响应中。
  • 如果是这种情况,那么您需要联系该服务的管理员。这是一个编程错误。
猜你喜欢
  • 1970-01-01
  • 2014-08-31
  • 2018-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多