我有一个.NET Web服务及其衍生版本。
我的问题是,在派生版本中,我有一个我想要隐藏的方法(来自WSDL和首页)。我已经尝试覆盖,将其标记为已过时,将其设置为私有和覆盖,但仍然,webservice属性仍然“有所作为”。
有没有办法删除派生方法的方法属性。或者在WSDL中隐藏方法的任何方法?
//罗宾
答案 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