2010-07-21 49 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