Создание экземпляра класса 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 позиции.