2010-07-21 50 views
2

考慮暴露出一個抽象類,一個WebMethod:在ASP.NET 2.0 Web服務暴露了其它類

[WebMethod] 
public void Save(AbstractEntity obj) 
{ 
    // .. 
} 

有幾類繼承從AbstractEntity

public class Patient : AbstractEntity 
{ 
    // ... 
} 

現在我想使web服務消費者創建新的患者對象並保存:

service.Save(new Patient { Name = "Doe", Number = "1234567" }); 

B因爲「保存」需要一個AbstractEntity,所以客戶端不會有Patient代理。我當然可以創建一個虛擬方法來暴露病人,但我希望有更好的方法。

如何使患者暴露類和其他類的web服務界面不直接引用在一個不錯的方式?

回答

5

你需要一個XmlInclude屬性添加到您的方法:

[WebMethod] 
[XmlInclude(typeof(Patient))] 
public void Save(AbstractEntity obj) 
{ 
    // .. 
} 

寫在註釋,當您添加XmlInclude屬性和更新客戶端Web引用,代理類兩個AbstractEntity和Patient(派生自AbstractEntity)將被生成。

有一兩件事,是不是很好,是每當你創建AbstractEntity衍生一個新的類,你就不得不提另XmlInclude屬性添加到所有相關的Web方法。

+0

在客戶端代碼,並參照然後提供一個病人代理或根本的OP具有從代理AbstractEntity導出? – 2010-07-21 14:48:48

+0

謝謝! ...(填充符)... – 2010-07-21 14:48:59

+0

Patient代理派生自Abstractentity代理,它們都提供。 – 2010-07-21 14:50:18