2014-01-06 55 views
0

客戶端有一個非常古老的.net 1.1應用程序,他們需要一個服務。我在4.0中創建了一箇中間件,並且試圖返回數據。我建立的類使用ArrayLists,因爲.net 1.1將無法訪問通用列表。當客戶端使用我的代碼時,ArtayLists會以ArrayOfAnyType的形式出現,並且每個都必須在CLIENT端初始化,儘管我已在Sub New()中初始化它們。我不想讓客戶必須初始化每個數組列表。這裏是不起眼的代碼...爲什麼ArrayLists不能在Web服務中初始化?

<Serializable()> _ 
Public Class XApplication 

    Public Sub New() 
     _People = New ArrayList 
     _PhysicalHouseholds = New ArrayList 
     _TaxReturns = New ArrayList 
    End Sub 

    Public Property People() As ArrayList 
    Public Property PhysicalHouseholds() As ArrayList 
    Public Property TaxReturns() As ArrayList 
End Class 

嘗試使用XmlInclude屬性來定義類的類型,但它沒有效果。要清楚,我不能使用WCF。我必須使用網絡服務。

回答

0

當從Web引用生成客戶端代理時,代理將僅對數據建模。執行代碼(包括構造函數)不能從WSDL獲得。因此,當創建代理類的新實例時,屬性將具有默認值。

+0

我很感謝斯圖爾特的回答。但是,我很困惑。雖然我從來沒有傳過一個ArrayList,但我已經將類與對象一起傳遞,似乎他們會跑入相同的問題,但沒有。 –

+0

Apols - 我可能不會正確理解這一點。我可以確認您正在發佈服務(.Net 4,但使用@WebService),然後將其作爲1.1 Web引用使用,並將其留給嚮導以生成代理類。如果您不共享類型,那麼在服務器上使用的技術通常無關緊要 - 客戶端將從WSDL創建自己的代理)。您可以嘗試在服務器上公開一個'List ' - 1.1客戶端應該創建自定義類(儘管名字很瘋狂)以反序列化數據。 – StuartLC

+0

你描述的是正確的。我剛回去檢查一些舊代碼,我通過網絡服務發送了一個課程。該類具有屬於類的屬性。在sub新我初始化這些類。當我在另一端(消耗代碼)獲得它時,我只需要立即實現頂級課程。我不需要初始化所有屬於類的屬性。區別在於這些是類而不是數組列表,但我仍然不需要在使用代碼中實例化它們。 –

0

您總是必須在客戶端創建對象。

您無法通過Web服務發送對象。發送的消息是純文本,因此任何對象都必須以其包含的文本表示形式進行發送,並在客戶端通過解析文本並將數據放入新對象來重新創建。

相關問題