C# - 如何从派生类隐藏Web方法

时间:2009-11-27 15:47:19

标签: .net web-services inheritance methods wsdl

我有一个.NET Web服务及其衍生版本。

我的问题是,在派生版本中,我有一个我想要隐藏的方法(来自WSDL和首页)。我已经尝试覆盖,将其标记为已过时,将其设置为私有和覆盖,但仍然,webservice属性仍然“有所作为”。

有没有办法删除派生方法的方法属性。或者在WSDL中隐藏方法的任何方法?

//罗宾

3 个答案:

答案 0 :(得分:2)

您无法实现这一点,因为.NET的继承系统(以及任何其他面向对象的框架)都不是为此而设计的:看看the Liskov substitution principle

也许你应该采取另一种方法来实现你想要的。例如,不是使用继承,而是创建一个全新的服务,并使其方法只需调用原始服务类上的等效方法;这样,您只能在新服务中包含所需的方法。

答案 1 :(得分:0)

我认为没有可以启用此选项的选项。如果你真的需要隐藏它而你不能简单地删除它,我会创建一个新的web服务,它只暴露你想要暴露的方法。

答案 2 :(得分:0)

此方法适用于.Net 4.0:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service1 : System.Web.Services.WebService
{
    [WebMethod]
    public virtual string HelloWorld()
    {
        return "Hello World";
    }
}

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service2 : Service1
{
    public override string HelloWorld()
    {
        throw new NotImplementedException();
    }
}

Service2派生自Service1并覆盖HelloWorld WebMethod而不指定WebMethodAttribute