2009-11-27 28 views
0

我有一个.NET的Web服务,它的派生版本。C# - 如何隐藏派生类的Web方法

我的问题是,在派生版本中,我有一个我想隐藏的方法(从WSDL和首页)。我试图重写,标记为过时,将其设置为私有和重写,但仍然是,web服务属性仍然“有它的方式”。

是否有任何方法来删除派生方法的方法属性。或者以任何方式隐藏WSDL中的方法?

//罗宾

回答

0

我不觉得有什么,你可以让获得此行为的选项。如果你真的需要隐藏它,你不能简单地将其删除,我会创建一个新的Web服务,只公开您想要暴露的方法。

2

由于.NET(以及其他任何面向对象的框架)的继承系统并不是为此设计的:请看the Liskov substitution principle

也许你应该选择其他课程来达到你想要的。例如,不是使用继承,而是创建一个全新的服务,并使其方法简单地调用原始服务类上的等效方法;这样你就可以只包含你想在新服务中使用的方法。

+1

成分! – 2010-08-05 12:30:35

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(); 
    } 
} 

客服2从服务1派生并重写了HelloWorld的WebMethod不超过继承指定WebMethodAttribute