WCF XML-запрос только для частичной загрузки объекта - PullRequest
0 голосов
/ 18 марта 2019

У меня есть служба WCF с методом «POST», который принимает 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 имеет значение null.

XML и класс больше, но они загружают около 40% свойств.

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Для всех, кто застрял в этом, это потому, что узлы в XML были не в алфавитном порядке, и не был установлен DataMember (OrderNo).Поэтому, когда он сериализовал объект, .NET просто делал «как мог».

0 голосов
/ 19 марта 2019

При передаче объекта между серверной частью и клиентом необходимо убедиться, что DataContract согласован. Интерфейс IExtensibleDataObject является хорошим выбором для поддержания согласованности. И DataMember, и свойство IsRequired влияют на эту проблему.
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/data-contract-versioning
Кроме того, Serializer контракта данных ограничен свойством MaxItemInObjectGraph. См. Следующий код.

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

Не стесняйтесь обращаться ко мне, если есть что-то, с чем я могу помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...