【问题标题】:Expose additional classes in ASP.NET 2.0 webservice在 ASP.NET 2.0 Web 服务中公开其他类
【发布时间】:2010-07-21 14:37:21
【问题描述】:

考虑一个公开抽象类的网络方法:

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

有几个类继承自AbstractEntity,比如

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

现在我想让 web 服务消费者创建一个新的 Patient 对象并保存它:

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

因为“Save”需要一个 AbstractEntity,所以客户端不会有 Patient 代理。我当然可以创建一个暴露患者的虚拟方法,但我希望有更好的方法。

如何以一种不错的方式公开在 web 服务接口中未直接引用的 Patient 类和其他类?

【问题讨论】:

    标签: c# .net .net-2.0 asmx web-services


    【解决方案1】:

    您需要在方法中添加XmlInclude 属性:

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

    如 cmets 中所述,当您添加 XmlInclude 属性并在客户端更新 Web 引用时,将生成 AbstractEntity 和 Patient(派生自 AbstractEntity)的代理类。

    一件不太好的事情是,每当您创建一个从 AbstractEntity 派生的新类时,您都必须向所有相关的 Web 方法添加另一个 XmlInclude 属性。

    【讨论】:

    • 在客户端代码中,引用是否提供了患者代理,或者 OP 是否必须从代理 AbstractEntity 派生?
    • Patient 代理派生自 Abstractentity 代理,两者都提供。
    猜你喜欢
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多