我有我的自定義類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