【问题标题】:WCF XML Post Request Only Partially Loading ObjectWCF XML 发布请求仅部分加载对象
【发布时间】:2019-08-08 19:30:35
【问题描述】:

我有一个带有“POST”方法的 WCF 服务,该方法接受 XML 并将其转换为对象,问题是只有一些字段正在加载。

对象示例:

[DataMember, XmlElement(IsNullable = false, Type = typeof(String))]
    public String ClaimKey
    {
        get;
        set;
    }
    [DataMember, XmlElement(IsNullable = false, Type = typeof(String))]
    public String VehicleRegistrationNo
    {
        get;
        set;
    }

输入样本

[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Xml, RequestFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare)]
    public SalvageInstructionResponse Test(SalvageInstructionRequestHeader Item)
    {
        this._objOutput = new SalvageInstructionResponse(SalvageInstructionResponseStatus.FAILURE, "Test", Item.ToString());
        return this._objOutput;
    }

XML 示例:

      <ClaimKey>str1234</ClaimKey>
  <VehicleRegistrationNo>str1234</VehicleRegistrationNo>

所以使用上面的示例,只有“VehicleRegistrationNo”正在加载,但 ClaimKey 为空。

XML 和类更大,但它加载了大约 40% 的属性。

【问题讨论】:

  • 这没有多大意义。发生了一些你没有意识到的事情。没有看到更多的数据,我无能为力。建议采取一小部分 xml,您可以发布显示正在加载和未加载的标签。格式良好的 xml 只能有一个带有子元素的根元素,而您提供的只是两个没有父元素的子元素。

标签: c# xml wcf post


【解决方案1】:

对于其他陷入困境的人来说,这是因为 XML 中的节点不是按字母顺序排列的,并且没有设置 DataMember(OrderNo)。因此,当它对对象进行序列化时,.NET 只是在“尽力而为”。

【讨论】:

    【解决方案2】:

    在服务器端和客户端之间传输对象时,应确保DataContract一致。 IExtensibleDataObject 接口是保持一致性的好选择。 DataMember 和 IsRequired 属性都对这个问题有影响。
    https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/data-contract-versioning
    此外,Data contract Serializer 受 MaxItemInObjectGraph 属性的约束。参考以下代码。

    <behaviors>
          <serviceBehaviors>
            <behavior>
              <serviceMetadata httpsGetEnabled="true" httpGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="true" />
              <dataContractSerializer maxItemsInObjectGraph="2147483647" />
            </behavior>
          </serviceBehaviors>
    

    如果有什么我可以帮助的,请随时与我联系。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-22
      • 2017-05-11
      • 1970-01-01
      • 1970-01-01
      • 2018-09-02
      • 2019-12-15
      相关资源
      最近更新 更多