我有我的自定义类Customer以及它的属性。我在类和DataMember之上添加了DataContract标记到属性,并且它工作正常,但我调用了一个服务类的函数,传递了客户实例作为参数,并且我的一些属性获得了0个值。在WCF客户端创建服务端DataContract类的实例
在调试时,我可以看到我的属性值,并在它到达函数后,一些属性的值为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生成的客户端代理,以查看它是否位于该服务器中,并且与您的服务相同。因为这听起来很像合同不匹配。 – albertjan 2010-03-23 10:45:13
如果我在客户端或服务端创建服务类的实例,是否有区别? – hgulyan 2010-03-23 12:46:00
不是真的,但你应该确保你在双方都有相同的版本。你有自己的代理吗,还是让你为你创建一个代理? – albertjan 2010-03-23 13:14:49