Создание экземпляра класса DataContract на стороне клиента на стороне клиента в WCF

У меня есть свой пользовательский класс Customer со своими свойствами. Я добавил метку DataContract над классом и DataMember к свойствам, и она работала нормально, но я вызываю функцию класса обслуживания, передавая экземпляр клиента в качестве параметра, и некоторые из моих свойств получают 0 значений.

Во время отладки я вижу значения своих свойств и после того, как они попадают в функцию, значения некоторых свойств равны 0. Почему так может быть?

Между этими двумя действиями нет кода. Метка DataContract работает нормально, все в порядке. Есть предложения по этому вопросу?

Я пытался изменить ByRef на ByVal, но это ничего не меняет. Почему он должен передавать другие значения правильно, а некоторые целочисленные типы просто 0?

Может быть, ответ прост, но я не могу понять это.

Благодарю вас.

  <DataContract()> 
    Public Class Customer 
    Private Type_of_clientField As Integer = -1 

      <DataMember(Order:=1)>  
      Public Property type_of_client() As Integer 
        Get 
          Return Type_of_clientField 
        End Get 
        Set(ByVal value As Integer) 
          Type_of_clientField = value 
        End Set 
      End Property 
    End Class 

    <ServiceContract(SessionMode:=SessionMode.Allowed)> 
    <DataContractFormat()> 
    Public Interface CustomerService 

    <OperationContract()> 
    Function addCustomer(ByRef customer As Customer) As Long 

    End Interface

Значение свойства type_of_client равно 6, прежде чем я вызову функцию addCustomer. После того, как он входит в эту функцию, значение равно 0.

ОБНОВЛЕНИЕ: проблема в создании экземпляра.

Когда я создаю экземпляр класса на стороне клиента, который хранится на стороне службы, некоторые из моих свойств передают 0 или ничего, но когда я вызываю функцию класса службы, которая возвращает новый экземпляр этого класса, он работает хорошо.

Какая разница? Может ли это быть проблемой сериализации?

1 ответ

Решение

Если вы используете параметр порядка для datamember, он должен начинаться с 0 и увеличиваться (т. Е. Превратить 1 в 0, следующий datamember становится 1 и т. Д.). Это может сработать, если у вас более одного члена, но вам некуда поместить вашу переменную, поскольку для класса, который вы показываете, нет 1 позиции.

Другие вопросы по тегам