2010-03-23 106 views
0

我有我的自定義類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或什麼也沒有,但是當我調用一個服務類的函數時,返回一個新的實例類,它工作正常。

有什麼區別?這可能是序列化問題嗎?

+0

您應該仔細查看vs生成的客戶端代理,以查看它是否位於該服務器中,並且與您的服務相同。因爲這聽起來很像合同不匹配。 – albertjan 2010-03-23 10:45:13

+0

如果我在客戶端或服務端創建服務類的實例,是否有區別? – hgulyan 2010-03-23 12:46:00

+0

不是真的,但你應該確保你在雙方都有相同的版本。你有自己的代理嗎,還是讓你爲你創建一個代理? – albertjan 2010-03-23 13:14:49

回答

1

如果您使用的是數據庫的order參數,則必須從0開始並遞增(即將1變爲0,下一個數據庫成爲1等)。如果您有多個成員,這可能會有效,但無處可放,因爲您展示的課程沒有1個位置。

+0

如果我將一些命令添加到我的類的某些屬性中,將不會自動向其他屬性生成命令參數?我可以在reference.vb中看到所有類參數的order參數。 我不確定,如果我的答案正確。 – hgulyan 2010-03-26 07:53:03

+0

這只是我的班級和服務功能的一小部分。我的屬性確實從1開始。謝謝你的信息。 難道真的會造成這種問題,或者不僅僅是這樣?爲什麼它會通過大部分參數,而其他參數不是? – hgulyan 2010-03-26 08:00:50

+0

我的reference.vb中的訂單與數據成員訂單參數的順序不匹配。 – hgulyan 2010-03-26 08:17:19