2009-11-27 1 views
0

У меня есть .NET webservice и его производные версии.C# - Как скрыть веб-метод из производного класса

У меня вопрос, в производных версиях у меня есть метод, который я хочу скрыть (с WSDL и на первой странице). Я попытался переопределить, отметив его как устаревший, установив его как личный и переопределяющий, но тем не менее атрибут webservice по-прежнему «имеет свой путь».

Есть ли способ удалить атрибут метода для производного метода. Или любой способ скрыть метод в WSDL?

// Робин

ответ

0

Я не думаю, что есть вариант, вы можете позволить, чтобы получить такое поведение. Если вам действительно нужно скрыть это, и вы не можете просто удалить его, я бы создал новый веб-сервис, который предоставляет только тот метод, который вы хотите открыть.

2

У вас возникли проблемы с достижением этого, потому что система наследования .NET (и любой другой объектно-ориентированной структуры, если на то пошло) не предназначена для этого: взгляните на the Liskov substitution principle.

Возможно, вам нужно пройти альтернативный курс для достижения желаемого. Например, вместо использования наследования создайте совершенно новую службу и сделайте ее методы просто вызывать эквивалентные методы в исходном классе сервиса; таким образом, вы можете включить только те методы, которые вы хотите использовать в новой службе.

+1

состава по наследству! –

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