【发布时间】:2010-03-23 09:17:22
【问题描述】:
我有我的自定义类 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
在我调用 addCustomer 函数之前,type_of_client 属性值为 6。进入该函数后,值为0。
更新:问题在于实例创建。
当我在客户端创建一个存储在服务端的类的实例时,我的一些属性传递 0 或什么都不传递,但是当我调用服务类的函数时,它返回该类的新实例,它工作正常。
有什么区别?这可能是序列化问题吗?
【问题讨论】:
-
您应该深入挖掘 vs 生成的客户端代理,看看它是否在其中并且与您的服务相同。因为这听起来很像合同不匹配。
-
如果我在客户端或服务端创建服务类的实例,有什么区别吗?
-
并非如此,但您应该确保双方的版本相同。您是自己制作代理还是让 vs 为您创建一个?
-
vs 生成代理,似乎当我将客户对象传递给另一个函数时,它工作正常。问题仅在于该功能。不同之处在于创建实例。我使用在服务器端生成并返回给客户端的客户对象,并且仅在调用该函数之前,我在客户端创建实例。我尝试在服务器端创建函数,创建实例并将其返回给客户端,它开始工作。有什么线索?
标签: wcf createinstance