2010-01-15 41 views
0

我有一個基於WSE 3.0的Web服務和一個WinForms客戶端應用程序,該應用程序使用在該服務的References.cs中定義的類型,但是它們提供了一些其他功能,以提供客戶。WSE 3.0 Web服務未知的派生類型

然而,當我通過子類的實例返回給Web服務,即使我明確地轉換回原來的類型,我得到了可怕的:

使用XmlInclude或SoapInclude屬性來指定類型這些不是靜態的。

引用我的派生類型。

代碼摘要:

public class DefinedInReferenceCs 
{ 
    // ... 
} 

public class ClientSubclass : DefinedInReferenceCs 
{ 
    // My extra stuff 
} 

public class MyClient 
{ 
    public CallTheWebService(ClientSubclass obj) 
    { 
     // obj is an instance of ClientSubclass, cast as DefinedInReferenceCs 
     svc.MyMethod((DefinedInReferenceCs)obj); 
     // Throws an exception complaining that ClientSubclass is not statically known 
    } 
} 

我可以明確地創建一個DefinedInReferenceCs實例,並進行相關領域的深層副本解決這個問題。有沒有更好的辦法?

回答

1

由於XML序列化程序使用反射來處理對象,因此無法防止它看到您的基類引用引用了派生類的實例。是的,您必須使用XmlInclude

OTOH,您是否考慮過使用部分類向原始代理類添加功能?這樣,你根本不需要派生類。

+0

需要指定XmlInclude的位置嗎?這是使用部分類的好主意。實例化客戶端時,服務器未知的字段將僅使用默認值進行初始化? – 2010-01-15 16:30:55